Vb.net 错误:";已经有一个打开的DataReader与此连接关联,必须先关闭该连接;
我收到这个错误信息,这是我的代码,请帮助我Vb.net 错误:";已经有一个打开的DataReader与此连接关联,必须先关闭该连接;,vb.net,sql-server-2012,Vb.net,Sql Server 2012,我收到这个错误信息,这是我的代码,请帮助我 Private Sub txtceknofak_Leave(sender As Object, e As EventArgs) Handles txtceknofak.Leave Dim nf As String nf = "select no_fak from terima_cucian where no_fak = '" & txtceknofak.Text & "'" comm = New SqlComm
Private Sub txtceknofak_Leave(sender As Object, e As EventArgs) Handles txtceknofak.Leave
Dim nf As String
nf = "select no_fak from terima_cucian where no_fak = '" & txtceknofak.Text & "'"
comm = New SqlCommand(nf, conn)
rdr = comm.ExecuteReader()
If rdr.HasRows Then
btproses.Enabled = True
btproses.Focus()
Else
MsgBox("Nomor faktur tidak ada")
txtceknofak.Clear()
txtceknofak.Focus()
End If
rdr.Close()
End Sub
为读者创造新的实例
rdr = new comm.ExecuteReader();
谢谢因为连接不是方法的一部分,所以它似乎是您的类中的一个字段。我不想那样做。而是使用局部变量,并在需要时打开/关闭它。实际上,连接池不会真正打开/关闭物理连接,因此您不必担心这样做效率低下 您可以通过使用
Try Finally
或使用using
-语句(更易读、更简洁)确保即使出现错误也能关闭连接:
Private Sub txtceknofak_Leave(sender As Object, e As EventArgs) Handles txtceknofak.Leave
Dim nf As String = "select no_fak from terima_cucian where no_fak = @no_fak"
Using conn = New SqlConnection(connectionstring)
Using comm = New SqlCommand(nf, conn)
comm.Parameters.AddWithValue("@no_fak", txtceknofak.Text)
conn.Open()
Using rdr = comm.ExecuteReader()
If rdr.HasRows Then
btproses.Enabled = True
btproses.Focus()
Else
MsgBox("Nomor faktur tidak ada")
txtceknofak.Clear()
txtceknofak.Focus()
End If
End Using
End Using
End Using ' *** this will also close the connection *** '
End Sub
我还使用了sql参数来阻止sql注入。连接在哪里?在
之前的哪一行中出现错误rdr.read()
如果rdr.HasRows,则可以将@TimSchmelter hisconn
声明为模块!!是一个方法,已返回读取器。顺便说一句,您不能创建方法的实例;)