[ad_1]
शुभ संध्या दोस्तों, आप यह कोड लिख रहे हैं लेकिन यह मुझे बताता है कि मेरे पास एक ExecuteReader खुला है।
क्या आप मेरी मदद कर सकते हैं
धन्यवाद
मैंने क्या प्रयास किया है:
Dim namecontr As String Dim rdr3 As Object Dim cmd3 As New MySqlCommand("Select s01_name_contr from s01_tpcontratti where id=" & rdr.Item(2), cnnmysql) rdr3 = cmd3.ExecuteReader rdr3 = cmd3.ToString ' 03/12 ore 17:25 capire perche non mi funziona si blocca 29/12 non ancora sbloccato 'cmd3.Dispose() ' rdr3.Read() If rdr3.HasRows = True Then namecontr = rdr3.Item(0).ToString End If Dim data As Date = CDate(rdr.Item(3).ToString) grid_contratto.Rows.Add(rdr(0).ToString, rdr(2).ToString, namecontr, "stocazzo", data.ToShortDateString) ' rdr3.close() Loop rdr.Close() 'cnnmysql.Clone() End Sub
संपादित करें – “समाधान 1” से ओपी कोड और समाधान हटा दिया गया
Private Sub carica_grigliacontratti(id As String) ' Call connetti_mysql() ' cnnmysql.Open() If CInt("0" & id) = 0 Then Exit Sub Dim sql As String Dim rdr As Object ' Dim rdr2 As Object ' grspecialisti.Rows.Clear() sql = "Select * from a01_contratti where a01_cliente=" & id Dim cmd1 As New MySqlCommand(sql, cnnmysql) rdr = cmd1.ExecuteReader() cmd1.Dispose() If rdr.HasRows = False Then rdr.Close() Exit Sub End If sistema_grcerca() ' Dim perc As Long = 0 ' Dim volte As Integer = 0w cnnmysql.Clone() grid_contratto.Rows.Clear() Do While rdr.Read Dim namecontr As String Dim rdr3 As Object Dim cmd3 As New MySqlCommand("Select s01_name_contr from s01_tpcontratti where id=" & rdr.Item(2), cnnmysql) rdr3 = cmd3.ExecuteReader rdr3 = cmd3.ToString ' 03/12 ore 17:25 capire perche non mi funziona si blocca 29/12 non ancora sbloccato 'cmd3.Dispose() ' rdr3.Read() If rdr3.HasRows = True Then namecontr = rdr3.Item(0).ToString End If Dim data As Date = CDate(rdr.Item(3).ToString) grid_contratto.Rows.Add(rdr(0).ToString, rdr(2).ToString, namecontr, "stocazzo", data.ToShortDateString) ' rdr3.close() Loop rdr.Close() 'cnnmysql.Clone() End Sub
समाधान 2
जब आप ExecuteReader को कॉल करते हैं, तो यह कनेक्शन को “लॉक” कर देता है क्योंकि रीडर एक पंक्ति के लायक जानकारी केवल तभी प्राप्त करता है जब आप रीड को कॉल करते हैं। लॉक मुक्त करने के लिए, आप कनेक्शन बंद करें। इसे संभालने का सबसे अच्छा तरीका हमेशा एक कनेक्शन ऑब्जेक्ट बनाना है Using
अवरोध पैदा करना[^]फिर उस ब्लॉक के अंदर आप दूसरे यूजिंग ब्लॉक में एक कमांड बनाते हैं, और उसके अंदर तीसरे में एक रीडर बनाते हैं:
Using con As New SqlConnection(strConnect) con.Open() Using cmd As New SqlCommand("SELECT iD, description FROM myTable", con) Using reader As SqlDataReader = cmd.ExecuteReader() While reader.Read() Dim myId As Integer = CInt(reader("iD")) Dim myDesc As String = DirectCast(reader("description"), String) Console.WriteLine("ID: {0}" & vbLf & " {1}", myId, myDesc) End While End Using End Using End Using
जब आपका कोड किसी भी माध्यम से (उदाहरण के लिए ब्रेक, रिटर्न, या अपवाद) यूजिंग ब्लॉक से बाहर निकलता है, तो उसके भीतर बनाई गई वस्तु स्वचालित रूप से बंद हो जाती है और आपके लिए निपटारा कर दी जाती है और आपको कभी भी बंद रीडर या कनेक्शन के साथ कोई समस्या नहीं होती है।
[ad_2]
コメント