2016-08-05 60 views
0

我得到一個System.InvalidOperationException與額外的信息說在這一行中有一個未關閉的數據讀取器。OleDbCommand unclosed 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在調試時關閉,但仍不起作用。

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中工作得很好。我現在正在與VS2015合作。

+0

所有的連接,命令,數據收集器都應該在本地創建,並在完成它們後處置。在你的代碼中的某處,你打開了一個閱讀器。 – Plutonix

回答

0

如果您收到一條錯誤消息,告訴您在該連接上打開了一個數據讀取器,那麼幾乎肯定會有。這就是爲什麼你應該總是使用Using塊爲短期,一次性物品,例如

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

讀者將在End Using線隱含地關閉,所以你不能離開意外打開它。根據具體情況,您應該也可以對連接做同樣的事情。

+0

即使使用使用它不起作用,我仍然得到相同的錯誤 – Sorx

+0

然後,無論它是一個不同的數據讀取器或東西在您的系統或在您的項目中損壞。 – jmcilhinney