2016-08-05 10 views
0

Ich bekomme eine System.InvalidOperationException mit der zusätzlichen Info, dass es einen nicht geschlossenen Datareader in dieser Zeile gibt.OleDbCommand nicht geschlossener Datereader Fehler

MyCmd.ExecuteNonQuery() 

MyCmd ist eine Private-Variable zugänglich für alle U-Boote und wird als

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 

Danach werden die Parameter hinzugefügt werden erklärt.

Ich benutze MyCon in einem Sub zuvor mit einem Datareader aber der Datareader ist geschlossen, wenn ich es debuggen aber es funktioniert immer noch nicht.

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() 

Dort implementiere ich den Datareader und schließe ihn später, und es ist geschlossen, das habe ich doppelt überprüft.
Dieser Code funktionierte perfekt in VS2010 BTW. Und ich arbeite gerade mit VS2015.

+0

Alle Ihre Verbindungen, Befehle, Datenreader sollten lokal erstellt und entsorgt werden, wenn Sie damit fertig sind. Irgendwo in deinem Code hast du einen Leser offen gelassen. – Plutonix

Antwort

0

Wenn Sie eine Fehlermeldung erhalten, die besagt, dass auf dieser Verbindung ein Datenleser geöffnet ist, dann ist dies fast sicher der Fall. Deshalb sollten Sie immer Using Blöcke für kurzlebige, wegwerfbare Objekte, z.

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

Der Leser wird sich an der End Using Linie implizit geschlossen werden, so dass Sie es nicht aus Versehen offen lassen kann. Abhängig von den Besonderheiten sollten Sie wahrscheinlich auch das Gleiche mit Ihrer Verbindung tun.

+0

auch bei der Verwendung Es funktioniert nicht und ich bekomme immer noch den gleichen Fehler – Sorx

+0

Dann ist es entweder eine andere Datenleser oder etwas ist auf Ihrem System oder in Ihrem Projekt beschädigt. – jmcilhinney

Verwandte Themen