[ad_1]
Selamat malam teman-teman, Anda sedang menulis kode ini tetapi saya diberitahu bahwa saya telah membuka ExecuteReader.
Bisakah Anda membantu saya
Terima kasih
Apa yang saya coba:
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
EDIT – Kode OP dari “Solusi 1” dan Solusi dihapus
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
Solusi 2
Saat Anda memanggil ExecuteReader, ini “mengunci” koneksi karena pembaca hanya mengambil informasi senilai baris saat Anda memanggil Baca. Untuk membebaskan kunci, Anda menutup koneksi. Cara terbaik untuk menangani hal ini adalah dengan selalu membuat objek koneksi di a Using
memblokir[^]lalu di dalam blok itu Anda membuat perintah di blok Menggunakan yang kedua, dan pembaca di blok ketiga di dalamnya:
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
Ketika kode Anda keluar dari blok Menggunakan dengan cara apa pun (Break, Return, atau Exception misalnya) objek yang dibuat di dalamnya secara otomatis ditutup dan dibuang untuk Anda dan Anda tidak pernah memiliki masalah dengan pembaca atau koneksi yang tidak tertutup.
[ad_2]
コメント