访问 OleDbDataReader 项目时出现 IndexOutOfRange 错误

Posted

技术标签:

【中文标题】访问 OleDbDataReader 项目时出现 IndexOutOfRange 错误【英文标题】:IndexOutOfRange error when accessing OleDbDataReader items 【发布时间】:2014-01-24 12:11:46 【问题描述】:

我有一些在 access 2010 中可以正常工作并返回正确值的 sql。但是,在 VB.NET 中,当我运行它时,会在 while 循环中导致上述错误。 dr.HasRows 返回 'TRUE' 但 var 'itm' 在自动窗口中不显示任何内容。有人可以解释为什么会发生这种情况以及我该如何纠正它。谢谢

Dim cmd As OleDbCommand = New OleDbCommand("SELECT Max(Requests.[Request no]) AS [MaxOfRequest no], Requests.Customer, " &
                    "Max([Request Boxes].[Request no]) AS [MaxOfRequest no1], [Request Boxes].Customer " &
                    "FROM Requests, [Request Boxes] " &
                    "GROUP BY Requests.Customer, [Request Boxes].Customer " &
                    "HAVING (((Requests.Customer)='" & cmbCustomer.Text & "') AND (([Request Boxes].Customer)='" & cmbCustomer.Text & "')) " &
                    "ORDER BY Requests.Customer, [Request Boxes].Customer", oledbCnn)

            dr = cmd.ExecuteReader()

            If dr.HasRows Then <--- this returns true

                While dr.Read

                    itm = CStr(dr.Item("[MaxOfRequest no]")) <--- ERROR HERE
                    itm2 = CStr(dr.Item("[MaxOfRequest no1]"))

                End While

            End If

【问题讨论】:

dr.HasRows 为 true 表示存在 。这并不意味着存在特定的字段(如[MaxOfRequest no]) - 错误试图说明这一点。 【参考方案1】:

这里不需要方括号:

itm = CStr(dr.Item("[MaxOfRequest no]")) 

方括号只是 SQL 语句中的分隔符;它们不是列名本身的一部分。试试这个:

itm = CStr(dr.Item("MaxOfRequest no"))

【讨论】:

非常感谢戈德

以上是关于访问 OleDbDataReader 项目时出现 IndexOutOfRange 错误的主要内容,如果未能解决你的问题,请参考以下文章

访问项目页面时出现 GitLab 500 错误

使用 Python 访问带有 GitLab API 的项目时出现 GitlabParsingError

Tomcat启动成功,但是访问项目时或者是localhost:8080时出现404;

Maven构建时出现访问限制错误

显示来自“System.Data.OleDb.OleDbDataReader”的“字符串”。访问数据库到 C# 表单

访问tp3.2的项目时出现No input file specified.的解决办法