【问题标题】:Error when checking if SqlDataReader column has null value检查 SqlDataReader 列是否具有空值时出错
【发布时间】:2012-02-16 17:04:24
【问题描述】:

当代码尝试验证 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) 命令中没有数据时,会收到一个错误,它是一个无效的尝试读取。

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

另外,我运行这两个查询,它们返回预期的空值。查询是:

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

我认为查询不会对我们在一台机器上而不是另一台机器上收到此错误的原因产生任何影响。

【问题讨论】:

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


    【解决方案1】:

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

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

    但是...如果您只需要一个值,那么您可能应该使用ExecuteScalar 之类的东西,而不是数据读取器。

    【讨论】:

    • 这行得通,但我有点困惑为什么它对我有用,但后来我没有在我的同事电脑上使用几乎相同的代码工作。无论如何,感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 2012-09-18
    • 2019-06-18
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    相关资源
    最近更新 更多