我尝试使用 mysql 事务保存多行数据,但是当我在指定行执行此代码时出现错误
Using conn As New MySqlConnection(connStr)
conn.Open()
Using sqlTrans As MySqlTransaction = conn.BeginTransaction()
Try
Dim bHasRows As Boolean
dim sSql as string
For Each kv As KeyValuePair(Of String, String) In dicOpts
If String.IsNullOrEmpty(kv.Key) Then Continue For
String.format("Select * FROM Options WHERE name = '{0}';",kv.Key)
Using cmd As New MySqlCommand(qb.GetQuery, conn)
bHasRows = cmd.ExecuteReader().HasRows
End Using
If bHasRows Then
ssql=String.format("UPDATE Options SET value ='{0}' WHERE name = '{1}';", kv.Value,kv.Key)
Else
ssql=String.format("INSERT INTO Options(name,Value) values('{0}','{1}';",kv.Key, kv.Value)
End If
Using cmd As New MySqlCommand(qb.GetQuery, conn)
cmd.ExecuteNonQuery() // <----- This is the error line
End Using
Next
sqlTrans.Commit()
Catch ex As Exception
sqlTrans.Rollback()
Throw
Finally
End Try
End Using
我遇到的错误
There is already an open DataReader associated with this Connection which must be closed first
如您所见,每次使用时都会关闭阅读器
最佳答案
这是你错误的地方:
bHasRows = cmd.ExecuteReader().HasRows
在数据读取器上使用使用
:
Using dr = cmd.ExecuteReader()
bHasRows = dr.HasRows
End Using
关于mysql - .net 异常 已经有一个与此连接关联的打开的 DataReader,必须先将其关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39308641/