检查SqlDataReader列是否具有空值时出错

时间:2012-02-16 17:04:24

标签: c# asp.net sql-server sql-server-2008 sql-server-2005

当代码尝试验证SqlDataReader是否在列中返回空值时,其中一个与我一起处理项目的人不断收到错误。他运行这段代码:

if (!DB_Conn.isConnected()) DB_Conn.Connect();
using (SqlDataReader dr = DB_Conn.QueryDB(query))
{
   if (dr.HasRows && !dr.IsDBNull(0))
   {
       maxID = dr.GetInt32(0);
   }
}

但是当在!dr.IsDBNull(0)命令中没有数据时,得到一个错误,它是一个无效的attemtp。

如果我运行相同的代码,但我查询不同的表,它可以工作。

此外,我运行两个查询并返回预期的空值。查询是:

SELECT MAX(ID) FROM Loan;
SELECT MAX(ID) FROM InternationalSwap;

我不认为查询对我们在一台机器而不是另一台机器上出现此错误的原因有任何影响。

1 个答案:

答案 0 :(得分:5)

在尝试访问任何列之前,您需要调用Read方法:

while (dr.Read())
{
    if (!dr.IsDBNull(0))
        maxID = dr.GetInt32(0);
}

但是......如果你只需要一个值,那么你应该使用像ExecuteScalar这样的东西而不是datareader。