[ad_1]
Chào buổi tối các bạn, các bạn đang viết mã này nhưng nó cho tôi biết rằng tôi đang mở một Trình đọc thực thi.
Bạn có thể giúp tôi một tay không
Cảm ơn
Những gì tôi đã thử:
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 – Mã OP từ “Giải pháp 1” và Giải pháp đã bị xóa
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
Giải pháp 2
Khi bạn gọi Thực thiReader, nó sẽ “khóa” kết nối vì trình đọc chỉ tìm nạp thông tin có giá trị của một hàng khi bạn gọi Đọc. Để giải phóng khóa, bạn đóng kết nối. Cách tốt nhất để xử lý vấn đề này là luôn tạo một đối tượng kết nối trong một Using
khối[^]sau đó bên trong khối đó, bạn tạo một lệnh trong khối Sử dụng thứ hai và một trình đọc ở khối thứ ba bên trong khối đó:
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
Khi mã của bạn thoát khỏi khối Sử dụng bằng bất kỳ phương tiện nào (ví dụ: Phá vỡ, Trả lại hoặc Ngoại lệ), đối tượng được tạo bên trong nó sẽ tự động được đóng và xử lý cho bạn và bạn không bao giờ gặp vấn đề với các đầu đọc hoặc kết nối không được đóng.
[ad_2]
コメント