2013-03-05 75 views
1

我收到此错误信息已经有与此连接关联的DataReader的开放必须先关闭VB.NET

“已经有与此连接 相关联的打开的DataReader,必须先关闭”

请帮我
我的代码是:

Public Sub update_qty(ByVal qry1 As String) 
     Dim dr As MySqlDataReader 'SQLiteDataReader 
     Dim comm As MySqlCommand 'SQLiteCommand 


     Try 

      comm = New MySqlCommand(qry1, conn) 
      dr = comm.ExecuteReader() 
     Catch ex As Exception 
      MsgBox(ex.Message) 
     End Try 

     Do While dr.Read() 
      exe_query("call cargosys.paymentsAdd('" & var1 & "', " & dr("inNo") & ")") 
     Loop 

     dr.Close() 
End Sub 

Public Sub exe_query(ByVal qry As String) As String 

     Dim cmd As MySqlCommand 

     Try 
      cmd = New MySqlCommand(qry, conn) 
      cmd.ExecuteNonQuery() 


     Catch ex As MySqlException 
      MessageBox.Show(ex.ToString)  
     End Try 

End Sub 

回答

4

你的问题是,你的代码打开DataReader,然后执行SqlCommandDataReader

试图改变这一行:

dr = comm.ExecuteReader() 

到:

dr = comm.ExecuteReader(CommandBehavior.CloseConnection) 

更多:DataReader CommandBehavior

或更改您的连接字符串enabl e MARS(多活动结果集)。 此设置将允许在同一连接上检索多个只进,只读结果集。

例如:

connectionString= 
"Data Source=.\SQLEXPRESS; 
AttachDbFilename=|DataDirectory|Northwind.MDF; 
Integrated Security=True; 
User Instance=True; 
MultipleActiveResultSets=True" 

更多:MARS

编辑

由于MARS关键字不被支持,尝试你的代码改成这样:

Public Sub update_qty(ByVal qry1 As String) 
     Dim dr As MySqlDataReader 'SQLiteDataReader 
     Dim comm As MySqlCommand 'SQLiteCommand 


     Try 

      comm = New MySqlCommand(qry1, conn) 
      dr = comm.ExecuteReader() 
     Catch ex As Exception 
      MsgBox(ex.Message) 
     End Try 

     Dim myList As New List(Of String) 

     Do While dr.Read() 
      myList.Add("call cargosys.paymentsAdd('" & var1 & "', " & dr("inNo") & ")") 
     Loop 

     dr.Close() 
End Sub 

Public Sub exe_query(myList As List(Of String)) 

     Dim cmd As MySqlCommand 

     For Each query As String In myList 
      Try 
       cmd = New MySqlCommand(query, conn) 
       cmd.ExecuteNonQuery() 

      Catch ex As MySqlException 
       MessageBox.Show(ex.ToString)  
      End Try 
     Next 

End Sub 

而不是做DataReader.Read - >SqlCommand.ExecuteNonQuery同时,此代码将首先读取所有数据,然后运行SqlCommand.ExecuteNonQuery

+1

我改变了我仍然得到同样的错误 – imsome1 2013-03-05 08:15:46

+0

我刚刚更新了我的答案 – 2013-03-05 08:16:24

+0

我使用的是MySQL,不支持关键字 – imsome1 2013-03-05 08:21:56

相关问题