【问题标题】:System.IndexOutOfRangeException on SQLDataReader Value Using C#使用 C# 的 SQLDataReader 值上的 System.IndexOutOfRangeException
【发布时间】:2011-10-10 10:58:46
【问题描述】:

我有一个返回三个整数的 SQLDataReader。但是,有时两个整数会返回空值。

为了解决这个问题,我写了以下内容:

int shoppingCartHeadID = 0;
int billID = 0;
int delID = 0;

conn.Open();
reader = comm.ExecuteReader();
if (reader.Read())
{
       shoppingCartHeadID = Convert.ToInt32(reader["shoppingCartHeadID"]);

       if (!reader.IsDBNull(billID))
       {
            billID = Convert.ToInt32(reader["billID"]);
       }

       if (!reader.IsDBNull(delID))
       {
            delID = Convert.ToInt32(reader["delID"]);
       }                
}
reader.Close();

很遗憾,我仍然收到错误消息。有什么建议吗?

PS 我也试过了,没有运气

if (reader["billID"] != null)

【问题讨论】:

  • 如果您尝试通过整数索引而不是列名来访问读取器的值,它是如何工作的? lile 0、1 或 2...?
  • 我希望你有这些名字 rite .. 你在查询中使用了正确的别名吗?

标签: c# asp.net sqldatareader dbnull


【解决方案1】:

我会尝试通过索引而不是列名来访问,以防您传递一个不存在的列名。

此外,请确保您使用 using 块包装您的阅读器,以便在任何情况下,即使出现异常,您的阅读器也会被正确关闭和处置,例如以这种方式:

...
using(var reader = comm.ExecuteReader())
{
    if (reader.Read())
    {
           shoppingCartHeadID = Convert.ToInt32(reader[0]);

           if (!reader.IsDBNull(1))
           {
                billID = Convert.ToInt32(reader[1]);
           }

           if (!reader.IsDBNull(2))
           {
                delID = Convert.ToInt32(reader[2]);
           }
    }
}

【讨论】:

    【解决方案2】:

    使用GetXXXX(colIndex) 方法。

    if (!reader.IsDBNull(0)) // I presume that billid at 0 ordinal  
     {
        billID = reader.GetInt32(0);
     }
    if (!reader.IsDBNull(1)) // I presume that delId at 1 ordinal
     {
        delID = reader.GetInt32(1);
     }  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-24
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多