我收到此错误消息,这是我的代码,请帮帮我
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
答案 0 :(得分:2)
由于连接不是方法的一部分,因此它似乎是您班级中的一个字段。我不鼓励这样做。而是使用局部变量并在需要时打开/关闭它。实际上连接池不会真正打开/关闭物理连接,所以你不必害怕这是低效的。
您可以使用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-parameters来阻止sql-injection。
答案 1 :(得分:0)
制作读者的新实例
rdr = new comm.ExecuteReader();
由于