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()之后,问题解决。