使用 C# 对 SQLDataReader 值进行 System.IndexOutOfRangeException

Com*_*umb 3 c# asp.net dbnull sqldatareader

我有一个返回三个整数的 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();
Run Code Online (Sandbox Code Playgroud)

不幸的是我仍然收到错误消息。有什么建议么?

PS我也尝试过这个但没有运气

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

Dav*_*ras 5

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

另外,请确保使用 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]);
           }
    }
}
Run Code Online (Sandbox Code Playgroud)