错误已经存在与此连接关联的打开的DataReader,必须先关闭该连接vb.net“ RD = CMD.ExecuteReader”

时间:2018-12-02 22:22:52

标签: mysql vb.net

Sub CariData()
    CMD = New MySqlCommand("Select * from tbanggota where nomoragt='" & ComboBox1.Text & "'", conn)
    RD = CMD.ExecuteReader
    RD.Read()
    If RD.HasRows Then
        LblNamaAgt.Text = RD.Item("namaagt")
        CMD = New MySqlCommand("Select SUM(totalpjm) AS KETEMU FROM tbpinjam WHERE Nomoragt='" & ComboBox1.Text & "'", conn)
        RD = CMD.ExecuteReader
        RD.Read()
        LblTelahPjm.Text = RD.Item(0)
        If LblTelahPjm.Text = 0 Then
            MsgBox("" & LblNamaAgt.Text & " tidak punya pinjaman")
        End If
    Else
        MsgBox("Nomor anggota tidak teRDaftar")
        ComboBox1.Focus()
        Exit Sub
    End If
    Call Pinjaman()
End Sub

1 个答案:

答案 0 :(得分:0)

标题中提供的错误可以解释。

您正在两个命令之间共享conn变量。如果您的查询是连续的并且在它们之间是关闭的,这很好。在您的情况下,您应该创建两个不同的连接,并将它们传递给您的命令。我不了解您的整个应用程序,但总的来说,好的做法是在尽可能小的范围内创建/处理您的连接和命令,并且不要让它们长期存在。

Sub CariData()
    Using conn As New SqlConnection("connection string here")
        conn.Open()
        Using CMD As New SqlCommand("Select * from tbanggota where nomoragt='" & Combobox1.Text & "'", conn)
            Using RD As SqlDataReader = CMD.ExecuteReader
                RD.Read()
                If RD.HasRows Then
                    LblNamaAgt.Text = RD.Item("namaagt")
                    Using innerconn As New SqlConnection("connection string here")
                        innerconn.Open()
                        Using innerCMD As New SqlCommand("Select SUM(totalpjm) AS KETEMU FROM tbpinjam WHERE Nomoragt='" & Combobox1.Text & "'", innerconn)
                            Using innerRD As SqlDataReader = innerCMD.ExecuteReader
                                innerRD.Read()
                                LblTelahPjm.Text = innerRD.Item(0)
                                If LblTelahPjm.Text = 0 Then
                                    MsgBox("" & LblNamaAgt.Text & " tidak punya pinjaman")
                                Else
                                    MsgBox("Nomor anggota tidak teRDaftar")
                                    Combobox1.Focus()
                                    Exit Sub
                                End If
                            End Using
                        End Using
                    End Using
                End If
                Call Pinjaman()
            End Using
        End Using
    End Using
End Sub

同样,您的查询似乎并不相互依赖,并且可以按照相同的连接顺序运行,如下所示:

Sub CariData()
    Using conn As New SqlConnection("connection string here")
        conn.Open()
        Using CMD As New SqlCommand("Select * from tbanggota where nomoragt='" & Combobox1.Text & "'", conn)
            Using RD As SqlDataReader = CMD.ExecuteReader
                RD.Read()
                If RD.HasRows Then
                    LblNamaAgt.Text = RD.Item("namaagt")
                End If
            End Using
        End Using
        Using CMD As New SqlCommand("Select SUM(totalpjm) AS KETEMU FROM tbpinjam WHERE Nomoragt='" & Combobox1.Text & "'", conn)
            Using RD As SqlDataReader = CMD.ExecuteReader
                RD.Read()
                LblTelahPjm.Text = RD.Item(0)
                If LblTelahPjm.Text = 0 Then
                    MsgBox("" & LblNamaAgt.Text & " tidak punya pinjaman")
                Else
                    MsgBox("Nomor anggota tidak teRDaftar")
                    Combobox1.Focus()
                    Exit Sub
                End If
            End Using
        End Using
        Call Pinjaman()
    End Using
End Sub