我面临着DataReader的一个奇怪问题。我正在使用OdbcClient和传统的rdbms系统。
我正在向数据库发送follwing命令。
select Col1, Col2, Col3 from Table1 where Col2 = 'Val1';
但在某些情况下,当我通过DataReader迭代它时,如下所示。
IDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
// Get the values from reader
int col2 = reader.GetValue(1);
}
尽管我在数据库中的Col2列中有价值,但我将Col2值作为DBNull获取。我正确地获得了Col1和Col3的值。这种行为的可能原因是什么?
更新:如果在调用cmd.ExecuteQuery()之前调用cmd.Prepare(),则会修复此问题。任何人都可以解释这种行为吗?
答案 0 :(得分:0)
Col2的数据类型是什么?你正在阅读GetValue,也许数据库有一个不能转换为Int的值......是这样的吗?
答案 1 :(得分:0)
您是否尝试使用命名参数进行阅读:
int col2 = int.parse(reader["Col2"].ToString());