Vb.net 已经有一个与此连接关联的打开的DataReader,必须在vb 2010 professional中首先关闭它

Vb.net 已经有一个与此连接关联的打开的DataReader,必须在vb 2010 professional中首先关闭它,vb.net,Vb.net,我正在使用vb 2010 professional,我遇到了“已经有一个打开的DataReader与此连接关联,必须先关闭该连接”的问题 这是我的完整源代码: Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick MysqlConn = New MySqlConnection MysqlConn.ConnectionStri

我正在使用vb 2010 professional,我遇到了“已经有一个打开的
DataReader
与此
连接关联,必须先关闭该连接”的问题

这是我的完整源代码:

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick


    MysqlConn = New MySqlConnection
    MysqlConn.ConnectionString = "server=localhost;userid=root;password=;database=penjara"
    Dim Reader As MySqlDataReader


    MysqlConn.Open()
    Dim query As String
    Dim spath As String
    Dim count As Integer = 0
    Dim mysound As Media.SoundPlayer


    query = "select* from penjara.info"
    Command = New MySqlCommand(query, MysqlConn)
    Reader = Command.ExecuteReader

    While Reader.Read
        count = count + 1

        query = "Select penjara.info where  no =count"
        Command = New MySqlCommand(query, MysqlConn)
        Reader = Command.ExecuteReader

        If (Reader.GetInt32("keadaan") = 1) & (Reader.GetInt32("no") = count) Then
            Form2.Show()
            Me.Hide()
            spath = "C:\Users\User\Music\emergency003.wav"
            mysound = New Media.SoundPlayer(spath)
            mysound.PlayLooping()
        ElseIf (Reader.GetInt32("keadaan") = 1) & (Reader.GetInt32("no") = count) Then
            Form3.Show()
            Me.Hide()
            spath = "C:\Users\User\Music\emergency003.wav"
            mysound = New Media.SoundPlayer(spath)
            mysound.PlayLooping()
        ElseIf (Reader.GetInt32("keadaan") = 1) & (Reader.GetInt32("no") = count) Then
            Form4.Show()
            Me.Hide()
            spath = "C:\Users\User\Music\emergency003.wav"
            mysound = New Media.SoundPlayer(spath)
            mysound.PlayLooping()
        ElseIf (Reader.GetInt32("keadaan") = 1) & (Reader.GetInt32("no") = count) Then
            Form5.Show()
            Me.Hide()
            spath = "C:\Users\User\Music\emergency003.wav"
            mysound = New Media.SoundPlayer(spath)
            mysound.PlayLooping()
        ElseIf (Reader.GetInt32("keadaan") = 1) & (Reader.GetInt32("no") = count) Then
            Form5.Show()
            Me.Hide()
            spath = "C:\Users\User\Music\emergency003.wav"
            mysound = New Media.SoundPlayer(spath)
            mysound.PlayLooping()
        End If
    End While
End Sub

您正在读卡器上循环,然后尝试在读卡器上打开新的读卡器

While Reader.Read              <<< looping on this
    count = count + 1

    query = "Select penjara.info where  no =count"
    Command =  New MySqlCommand(query, MysqlConn)      <<<<<<<<<<<<< trying to open new one

    Reader = cmd.ExecuteReader                    <<<<<<<<<<<<< trying to open new one
在循环的底部

End Using
End Using
End Using
因为这将关闭打开的连接

此外,该查询看起来很可疑。您确定不想要类似

query = String.Format("Select penjara.info where  no ={0}", count)

显示此错误是因为在计时器的下一个滴答声中尝试执行代码时连接已打开。因此,通过此代码打开连接可以避免这种情况

  If MysqlConn.State = ConnectionState.Open Then
    MysqlConn.Close()
  else
    MysqlConn.Open()
  End If 

我改了,但问题还是一样。我更改了命令和读卡器,但仍不工作。。帮助我:(你说你改变了它。你做了什么改变?我已经编辑了答案。请检查全部内容。请编辑你的问题。不要在评论中发布代码。
query = String.Format("Select penjara.info where  no ={0}", count)
  If MysqlConn.State = ConnectionState.Open Then
    MysqlConn.Close()
  else
    MysqlConn.Open()
  End If