接收 Err Msg:已经有一个打开的 DataReader 与此命令关联,必须先关闭

Posted

技术标签:

【中文标题】接收 Err Msg:已经有一个打开的 DataReader 与此命令关联,必须先关闭【英文标题】:Receiving Err Msg: There is already an open DataReader associated with this Command which must be closed first 【发布时间】:2016-05-20 15:39:03 【问题描述】:
        con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Name\Desktop\AccessFile.accdb;"
        con.Open()
        Dim strQ As String = "select * from Table1 where Ticket_No = '" & Text_TicketNo.Text.ToString & "';".ToString
        Dim cmdQ As OleDbCommand = New OleDbCommand(strQ, con)
        Dim QReader As OleDbDataReader
        Dim it As String
        QReader = cmdQ.ExecuteReader
        If QReader.HasRows Then
            While QReader.Read
                it = QReader.Item("user_name")
                MsgBox(it)
            End While
        End If
        cmdQ.ExecuteNonQuery()
        con.Close()

收到以下错误。不确定该连接关闭需要在哪里进行。在此先感谢您的帮助。试图在网上寻找这个,但找不到任何关于这个问题的帮助。尝试用我的眼睛,但我认为我只需要另一个人来查看我的代码并告诉我问题出在哪里。谢谢。

错误发生在下一行。 cmdQ.ExecuteNonQuery()

【问题讨论】:

你为什么有cmdQ.ExecuteNonQuery()?你的意思是把它扔掉吗?此外,了解该异常的位置可能非常有用。 我没那么傻。问题是我有那个 cmdQ 命令认为我正在删除、更新或插入记录。谢谢。 此外,您应该始终在以后的问题中发布异常发生的位置。 为未来的访问者编辑了问题。会有很多人会犯这个愚蠢的错误。再次感谢您 【参考方案1】:

问题是这里的额外调用:

cmdQ.ExecuteNonQuery()

除非您发出 UPDATEDELETEINSERT 或任何其他修改内容的语句,否则您永远不需要这个。 SELECT 查询语句仅与ExecuteReader 一起使用。

所以删除该行,异常应该会消失。

【讨论】:

以上是关于接收 Err Msg:已经有一个打开的 DataReader 与此命令关联,必须先关闭的主要内容,如果未能解决你的问题,请参考以下文章

golang:模拟http post请求

go 接收发送文件

WebSocket API错误码

如何从不在 Outlook 中的硬盘中打开 Outlook .msg 文件?

在本地 IIS 上投射接收器会产生 ERR_CONNECTION_REFUSED?

前台用ajax传值给ASPX页面并用art.daolog打开aspx页面怎么没有数据显示(请大神帮忙解决下)?