2016-08-05 1 views
0

System.InvalidOperationExceptionには、この行に未公開のDatareaderがあるという追加の情報があります。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 

として宣言されています。

私はMyConをSub beforeで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を使っています。

+0

すべての接続、コマンド、データウェアハウスはローカルで作成し、完了したら処分する必要があります。あなたのコードのどこかにあなたは読者を開いたままにしました。 – Plutonix

答えて

0

この接続にデータリーダーが開いているというエラーメッセージが表示される場合は、ほぼ確実です。このため、短命で使い捨てのオブジェクトには、常にUsingブロックを使用する必要があります。

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

あなたが誤って開いてそれを残すことができないので、読者は暗黙のうちにEnd Using行で閉じられます。具体的な内容によっては、接続で同じことをやっているはずです。

+0

を使用していても使用できません。同じエラーが表示されます。 – Sorx

+0

次に、システムまたはプロジェクトで、別のデータリーダーまたは何かが壊れています。 – jmcilhinney

関連する問題