【问题标题】:How to avoid IndexOutOfRangeException indexing DataReader columns?如何避免 IndexOutOfRangeException 索引 DataReader 列?
【发布时间】:2025-11-17 06:40:02
【问题描述】:

我遇到了一个“IndexOutOfRangeException”问题。我认为这是因为当代码尝试从数据库中获取 DateModified col 时,它有时会包含 NULLS(用户自创建页面以来并不总是更新页面)。

这是我的代码;

s = ("select datemodified, maintainedby, email, hitcount from updates where id =   @footid")
Dim x As New SqlCommand(s, c)
x.Parameters.Add("@footid", SqlDbType.Int)
x.Parameters("@footid").Value = footid
c.Open()
Dim r As SqlDataReader = x.ExecuteReader
While r.Read
    If r.HasRows Then
        datemodified = (r("DateModified"))
        maintainedby = (r("maintainedby"))
        email = (r("email"))
        hitcount = (r("hitcount"))
    End If
End While
c.Close()

我认为(经过一些 msdn)添加;

If r.HasRows Then 

End If 

会解决问题,但到目前为止,添加后我仍然得到相同的旧 IndexOutOfRangeException

(ps,我已经尝试将日期修改为字符串/日期时间)

【问题讨论】:

  • 如何检查列是否为空?
  • 我试过了; If r.Item("DateModified") IsNot DBNull.Value Then datemodified = (r("DateModified")) Else datemodified = String.Empty End If(但似乎没有用)

标签: asp.net sql vb.net ado.net


【解决方案1】:

【讨论】:

    【解决方案2】:

    有变化

    datemodified = (r("DateModified")) 
    

    datemodified = (r("datemodified")) 
    

    工作?

    【讨论】:

    • 感谢您的帮助,不,我确实将它设置为 datemodified 然后我更改为 DateModified 作为解决问题的尝试。
    【解决方案3】:

    我试图通过传入空值和空集来重新创建您的问题。我无法在您提供的代码示例中重新创建它。您介意发布更多代码,甚至是整个页面吗?是否有发生错误的行号?我想进一步挖掘。

    【讨论】: