当前位置: 首页 > news >正文

c#OdbcDataReader的数据读取

先有如下c#示例代码:

string strconnect = "DSN=custom;UID=sa;PWD=123456;"

OdbcConnection odbc = new OdbcConnection(strconnect);

odbc.Open();

if (odbc.State != System.Data.ConnectionState.Open)

{

   return;

}

string strSql = "select ID from mytable";

OdbcCommand odbcCmd = new OdbcCommand(strSql, odbc);

OdbcDataReader dtReader = odbc.ExecuteReader();

// 数据库里确保mytable中是有数据的

int tableid = (int)dtReader["ID"];

以上代码有时候正常运行,有时候在最后一行会提示:

System.InvalidOperationException: '不存在此行/列的数据。'

但实际上出现上面问题崩溃时,查看dtReader是可以看到里面有数据的。然后改成索引也是一样:

int tableid = (int)dtReader[0];

有时候成功,有时候失败崩溃。

通过查看帮助说明,有大致这样的描述:如果是流,在读取时可能数据还未到达。

这个意思就是在执行完语句之后立即获取其中的数据,有可能数据流还未到达,所以这个读取就会失败,也就是“列”还不存在导致崩溃。为了解决这个问题,必需先Read()一次:

dtReader.Read();

int tableid = (int)dtReader["ID"];

添加Read()之后,问题解决。

相关文章:

  • LeetCode LCR 033. 字母异位词分组
  • 天线测试报告解读学习
  • 项目三 - 任务3:学生多态方式喂养宠物
  • ts bug 找不到模块或相应类型的声明,@符有红色波浪线
  • 基于Dify的工作流实现python编码规则的检查
  • 【程序员AI入门:应用】7.LangChain是什么?
  • 第11次:用户注册(完整版)
  • OpenHarmony GPIO应用开发-LED
  • 63.微服务保姆教程 (六) SkyWalking--分布式链路追踪系统/分布式的应用性能管理工具
  • 原生 IP(Native IP)
  • C++23 std::generator:用于范围的同步协程生成器 (P2502R2, P2787R0)
  • FlinkCDC采集MySQL8.4报错
  • 如何监控Kafka的Lag(消费延迟)?
  • RT-Thread中的配置
  • MySQL同步ES的6种方案!
  • [三分钟]性能测试工具JMeter入门: 下载安装JMeter并设置中文;JMeter基本使用流程
  • 解锁科研文献检索密码:多工具协同攻略
  • 给frp设置开机自启
  • 应急响应靶场web1:知攻善防实验室
  • 分布式 ID 的技术解析与实现实践
  • 湖北奥莱斯轮胎公司逃避监管排放大气污染物被罚25万元
  • 外交部回应西班牙未来外交战略:愿与之一道继续深化开放合作
  • 新闻分析:电影关税能“让好莱坞再次伟大”?
  • “穿越看洪武”,明太祖及其皇后像台北故宫博物院南园展出
  • “五一”从昆明机场出境1.4万人次,较去年增长7.7%
  • 晒被子最大的好处,其实不是杀螨虫,而是……