用C#时使用SQLDataReader值出现了System.IndexOutOfRangeException错误

3
我有一个SQLDataReader返回了三个整数,但有时两个整数将返回null值。为了解决这个问题,我编写了以下代码:
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我也尝试过这个,但没有成功

如果(reader [“billID”]!= null)


如果您尝试通过整数索引而不是列名访问读取器的值,例如0、1或2,它会如何工作? - Davide Piras
希望你已经把那些名字写对了.. 你在查询中使用了正确的别名吗? - V4Vendetta
2个回答

5
我建议您尝试通过索引而非列名进行访问,以防传递不存在的列名。
此外,请确保使用using块包装您的reader,这样即使有异常,您的reader也会被正确关闭和处理。例如:
```csharp using (var reader = command.ExecuteReader()) { // do something with the reader here } ```
...
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]);
           }
    }
}

0
使用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);
 }  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接