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

DFo*_*ord 0 c# sql-server asp.net sql-server-2005 sql-server-2008

当代码尝试验证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);
   }
}
Run Code Online (Sandbox Code Playgroud)

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

如果我运行相同的代码,但我查询不同的表,它的工作原理.

此外,我运行两个查询,他们返回预期的空值.查询是:

SELECT MAX(ID) FROM Loan;
SELECT MAX(ID) FROM InternationalSwap;
Run Code Online (Sandbox Code Playgroud)

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

Luk*_*keH 5

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

while (dr.Read())
{
    if (!dr.IsDBNull(0))
        maxID = dr.GetInt32(0);
}
Run Code Online (Sandbox Code Playgroud)

但是......如果你只需要一个值,那么你应该使用类似于ExecuteScalardatareader的东西.