2014-07-23 48 views
-2

我正在使用vb 2010专业版,并且“已经有一个与此Connection相关联的开放DataReader必须首先关闭”问题已经有一个开放的DataReader与此连接相关联,必须先关闭vb 2010专业

这是我的全部源代码:

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 

回答

0

的错误显示,因为试图在旁打勾来执行代码时,连接已经打开计时器。所以它可以通过此代码打开连接来避免

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

您在循环读者然后尝试打开它

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 
一个新的阅读器

您应该在循环中创建新的连接和读取器(不重用变量)。他们应及时更换,像这样:

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

    Using con as New MySqlConnection(MysqlConn.ConnectionString) 
    Using cmd as New MySqlCommand(query, con) 
    Using rdr = cmd.ExecuteReader   

和你的if语句应该使用RDR:

If (rdr.GetInt32("keadaan") .... etc 

,并在环路上

End Using 
End Using 
End Using 

底部,这将关闭该打开连接。

而且查询看起来可疑你肯定不希望像...

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

我改变了它,但问题仍然存在。我改变命令和阅读器,但仍然不工作..帮助我:( – jibal

+0

你说你已经改变了它。你做了什么改变?我已经编辑了答案。请检查整个事情 –

+0

我改变了命令cmd和读者到rdr。 – jibal

相关问题