Vb.net 已经有一个与此连接关联的打开的DataReader,必须先关闭它
我收到了这个错误消息 “已存在与此连接关联的打开的DataReader 必须先关闭哪个?” 请帮帮我Vb.net 已经有一个与此连接关联的打开的DataReader,必须先关闭它,vb.net,Vb.net,我收到了这个错误消息 “已存在与此连接关联的打开的DataReader 必须先关闭哪个?” 请帮帮我 我的代码是: Public Sub update_qty(ByVal qry1 As String) Dim dr As MySqlDataReader 'SQLiteDataReader Dim comm As MySqlCommand 'SQLiteCommand Try comm = New MySqlCo
我的代码是:
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
您的问题是代码打开了一个
DataReader
,然后在DataReader
读取时执行SqlCommand
尝试更改此行:
dr = comm.ExecuteReader()
致:
更多:
或者更改连接字符串以启用MARS(多个活动结果集)。
此设置将允许检索同一连接上的多个只读前向结果集
例如:
connectionString=
"Data Source=.\SQLEXPRESS;
AttachDbFilename=|DataDirectory|Northwind.MDF;
Integrated Security=True;
User Instance=True;
MultipleActiveResultSets=True"
更多:
编辑
由于不支持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。ExecuteOnQuery
您的问题是,您的代码打开DataReader
,然后在DataReader
读取时执行SqlCommand
尝试更改此行:
dr = comm.ExecuteReader()
致:
更多:
或者更改连接字符串以启用MARS(多个活动结果集)。
此设置将允许检索同一连接上的多个只读前向结果集
例如:
connectionString=
"Data Source=.\SQLEXPRESS;
AttachDbFilename=|DataDirectory|Northwind.MDF;
Integrated Security=True;
User Instance=True;
MultipleActiveResultSets=True"
更多:
编辑
由于不支持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我使用的是Mysql,该关键字不是supported@imsome1如果这个答案解决了你的问题,通过将此标记为已接受的答案(按答案旁边的勾号)来支持Iswanto San。“DataReader已在此命令上处于活动状态”仍然收到此错误。我使用的是Mysql,而不是该关键字supported@imsome1如果此答案解决了您的问题,请通过将其标记为已接受答案(按答案旁边的勾号)来支持Iswanto San。“DataReader已在此命令上处于活动状态”仍将收到此错误。