【问题标题】:OleDbCommand unclosed Datareader ErrorOleDbCommand 未关闭的数据读取器错误
【发布时间】:2016-08-05 21:07:29
【问题描述】:

我收到了一个 System.InvalidOperationException 附加信息,说明此行中有一个未关闭的 Datareader。

MyCmd.ExecuteNonQuery()

MyCmd 是一个私有变量,所有子都可以访问,声明为

MyCmd = New OleDb.OleDbCommand()
MyCmd.CommandText = "Insert Into Netzwerkverwaltung(NSub, Nip, Npc, Nuser, Pherst, Pser, Pmod, Pcpu, Phdd, Pram, Pkauf, Sos, Sosoem, Sosopen, Sfunk, Soffice, Sofficeoem, Sofficeopen, Anmerkung) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);"
MyCmd.Connection = MyCon

在此之后添加参数。

我之前在 Sub 中使用 MyCon 和 Datareader,但在我调试时 Datareader 已关闭,但它仍然无法工作。

Dim myDR As OleDb.OleDbDataReader
MyCmd = New OleDb.OleDbCommand("SELECT * FROM Netzwerkverwaltung WHERE ID=?", MyCon)
MyCmd.Parameters.Add(New System.Data.OleDb.OleDbParameter("ID", System.Data.OleDb.OleDbType.Integer))
MyCmd.Parameters("ID").Value = Request("ID")

If MyCon.State = ConnectionState.Closed Then
    MyCon.Open()
End If
myDR = MyCmd.ExecuteReader()

在那里我实现了 Datareader 并稍后将其关闭,它已关闭,我仔细检查了。
这段代码在 VS2010 BTW 中运行良好。我现在正在使用 VS2015。

【问题讨论】:

  • 您的所有连接、命令、数据读取器都应该在本地创建,并在完成后处理掉。您在代码中的某个地方打开了阅读器。

标签: vb.net oledb


【解决方案1】:

如果您收到一条错误消息,告诉您在该连接上打开了一个数据读取器,那么几乎可以肯定存在。这就是为什么您应该始终将 Using 块用于短期的一次性对象,例如

Using myDataReader = myCommand.ExecuteReader()
    'Use myDataReader here.'
End Using

阅读器将在End Using 行隐式关闭,因此您不会意外将其打开。根据具体情况,您可能也应该对连接做同样的事情。

【讨论】:

  • 即使使用 Using it 不起作用,我仍然得到同样的错误
  • 那么要么是不同的数据读取器,要么是您的系统或项目中的某些内容已损坏。
猜你喜欢
  • 2017-06-12
  • 2017-02-16
  • 1970-01-01
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
  • 2020-10-25
  • 1970-01-01
  • 2016-12-01
相关资源
最近更新 更多