【发布时间】: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。
【问题讨论】:
-
您的所有连接、命令、数据读取器都应该在本地创建,并在完成后处理掉。您在代码中的某个地方打开了阅读器。