2014-07-23 2 views
-2

Я использую vb 2010 professional, и у меня есть «Есть уже открытый 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

Смежные вопросы

 Смежные вопросы