我需要一些帮助,我无法解决这个错误...我看了其他主题,但我不明白。
“已经有一个与此Connection相关联的开放DataReader ......”
这是我的代码:
Private Sub btnCautaNumeClient_Click(sender As Object, e As EventArgs) Handles btnCautaNumeClient.Click
MySqlConn = New MySqlConnection
MySqlConn.ConnectionString = "server=localhost; userid=root; password=root; database=multimedia_rent_project"
Dim SDA As New MySqlDataAdapter
Dim dbDataSet As New DataTable
Dim bSource As New BindingSource
Try
MySqlConn.Open()
Dim Query As String = "select ... bla bla bla;"
myCommand = New MySqlCommand(Query, MySqlConn)
If txtIntroducetiNumeleClientului.Text.Length = 0 Then
MessageBox.Show("No input!")
Else
Dim myReader As MySqlDataReader
myReader = myCommand.ExecuteReader
Dim nr As Integer = 0
While myReader.Read
nr += 1
End While
If nr = 0 Then
MessageBox.Show("No client find!")
Else
MessageBox.Show("Client found!")
SDA.SelectCommand = myCommand
SDA.Fill(dbDataSet)
bSource.DataSource = dbDataSet
cautaClientiDupaNume.dgwCautaClientiDupaNume.DataSource = bSource
SDA.Update(dbDataSet)
cautaClientiDupaNume.Show()
End If
End If
MySqlConn.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
MySqlConn.Dispose()
End Try
End Sub
答案 0 :(得分:0)
在计算记录的循环结束时,添加对Close
的调用 While myReader.Read
nr += 1
End While
myReader.Close()
出现此错误的原因是,当DataReader使用连接时,在关闭阅读器之前,它不能用于其他数据库命令。
在您的代码中,您打开阅读器来计算检索到的记录数,然后继续使用相同的连接(与命令关联)来填充数据集而不关闭阅读器。
说,我认为您应该更改代码以避免使用MySqlDataReader,因为您只是用它来计算检索到的记录。如果这是您唯一的要求,那么最好使用SQL函数COUNT()
Dim Query As String = "select COUNT(*) FROM table where .."
myCommand = New MySqlCommand(Query, MySqlConn)
Dim nr = Convert.ToInt32(myCommand.ExecuteScalar())
当然,更改了命令的命令文本以仅计算记录,然后您需要将commandtext重置为其先前的值(.... bla bla bla part ...)