为什么读取器对象中的索引超出范围错误

时间:2019-01-31 07:15:34

标签: sql stored-procedures

enter image description here

executeReader的结果集是项目列表

while (reader.Read())
{
    mailbody +=
        "<tr>" +
        "<td>" + reader["DevName"].ToString() + "</td>" +
        "<td>" + reader["DevId"].ToString() + "</td>" +
        "<td>" + reader["LocationID"].ToString() + "</td>" +
        "<td>" + reader["LocationName"].ToString() + "</td>" +
        "<td>" + reader["SubLocationID"].ToString() + "</td>" +
        "<td>" + reader["IPV6"].ToString() + "</td>" +
        "<td>" + reader["LastConnected"].ToString() + "</td>" +
        "<td>" + reader["LastDisconnected"].ToString() + "</td>" +
        "<td>" + reader["Online"].ToString() + "</td>" +
        "<td>" + reader["HardwareSerialNumber"].ToString() + "</td>" +
        "<td>" + reader["ServiceProviderID"].ToString() + "</td>" +
        "<td>" + reader["DateLastModified"].ToString() + "</td>" +
        "</tr>";
}

enter image description here

这是存储过程的结果集

2 个答案:

答案 0 :(得分:0)

您的SP缺少您要引用的几列:

"<td>" + reader["LocationName"].ToString() + "</td>" +
"<td>" + reader["LastConnected"].ToString() + "</td>" +
"<td>" + reader["LastDisconnected"].ToString() + "</td>" +

最后2个可能是LastConnTimeLastDisconnTime。确保名称匹配100%。

答案 1 :(得分:0)

在存储过程中指定名称为“ LocationName”的列或删除行

   "<td>" + reader["LocationName"].ToString() + "</td>" +

这是错误消息的是告诉你的一部分列,它无法找到:

enter image description here

编辑:可能还有几列与“存储过程”输出不匹配的列,但是您需要做的只是看看@其他信息,这是错误的一部分。

EDIT2:寻找@结果集从存储过程也会有问题找到列:“LastConnected”和“LastDisconnected”,因此该解决方案将是相同的或者删除的行或将其重命名(如在该示例中波纹管),以通过您的存储过程中提供的列名

    "<td>" + reader["LastConnTime"].ToString() + "</td>" +
    "<td>" + reader["LastDisconnTime"].ToString() + "</td>" +