2016-08-05 3 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 

로 선언된다.

SubRelease에서 Datareader로 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 BTW에서 완벽하게 작동했습니다. 그리고 지금 VS2015로 작업하고 있습니다.

+0

모든 연결, 명령, 데이터 보관자는 로컬로 생성되어 완료되면 처리해야합니다. 코드의 어딘가에서 독자는 독자를 열어 둡니다. – Plutonix

답변

0

해당 연결에 열린 데이터 판독기가 있다는 오류 메시지가 표시되면 거의 확실합니다. 따라서 수명이 짧고 일회용 인 객체의 경우 항상 Using 블록을 사용해야합니다. 실수로 열어 두지 수

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

독자는 암시 적으로 End Using 줄에서 종료됩니다. 세부 사항에 따라, 당신은 아마 당신의 연결로도 같은 일을해야합니다.

+0

사용할 때도 사용하지 않고 여전히 동일한 오류가 발생합니다 – Sorx

+0

다음은 다른 데이터 판독기이거나 시스템이나 프로젝트에서 손상된 것입니다. – jmcilhinney