接收 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()
除非您发出 UPDATE
、DELETE
、INSERT
或任何其他修改内容的语句,否则您永远不需要这个。 SELECT
查询语句仅与ExecuteReader
一起使用。
所以删除该行,异常应该会消失。
【讨论】:
以上是关于接收 Err Msg:已经有一个打开的 DataReader 与此命令关联,必须先关闭的主要内容,如果未能解决你的问题,请参考以下文章
如何从不在 Outlook 中的硬盘中打开 Outlook .msg 文件?