【问题标题】:Index was outside the bounds of the array in VB.net索引超出了 VB.net 中的数组范围
【发布时间】:2013-12-24 07:22:15
【问题描述】:

我在打印 if 语句时遇到此错误

索引超出了数组的范围

代码:

Private Sub radsingle_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles radsingle.CheckedChanged

        With comDB
            .CommandText = SQL
            rdDB = .ExecuteReader
        End With
        While rdDB.Read

            If rdDB(1).ToString = txtptp.SelectedItem.ToString Then
                txtcdays.Text = rdDB(2).ToString.Trim

                'Radmulti.Checked = False
            End If
        End While

        rdDB.Close()

    End Sub

这段代码有什么需要修改的地方吗?

【问题讨论】:

  • Datareader 索引从 0 开始。您确定 2 是有效列吗?为什么不使用rdDB.Item("columnName")
  • 提供实际的 SQL 会有所帮助,就像告诉我们错误发生在哪一行一样。我猜rdDB(2) 是问题所在,并假设您的选择中只有 2 列。 DataReader 上的索引是从 0 开始的。
  • 我还会按照@abhitalks 的建议在调用Read 之前检查是否存在行

标签: vb.net


【解决方案1】:

使用 DataReader 的正确方法是以下几行:

If DataReader.HasRows Then
    While DataReader.Read()
    If rdDB.Item("ColumnName1").ToString = txtptp.SelectedItem.ToString Then
        ...
    End If
    End While
End If

这样你可以检查DataReader是否包含行,也可以避免索引混淆。

当然,从您发布的代码中还不清楚SQL 变量的含义。您的查询可能没有返回任何行。

【讨论】:

    【解决方案2】:

    尝试使用列名而不是列索引

    【讨论】:

      猜你喜欢
      • 2015-04-19
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多