mysql - .net 异常 已经有一个与此连接关联的打开的 DataReader,必须先将其关闭

标签 mysql sql .net

我尝试使用 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/

相关文章:

python - 使用python将mysql中的值分配给dict

sql - node.js 登录无法使用 azure sql 数据库

.net - 使用正则表达式获取字符串的特定部分

c# - .NET Thread.Sleep 是否受 DST(或系统时间)更改的影响?

.net - 您将如何改进我们的未处理异常处理程序错误消息?

使用 mysqldump 备份 mysql 数据库

php - 使用 if(isset($_POST ['submit' ])) 在脚本打开时不显示回显不起作用

mysql : Can the balance ever get negative

sql - 使用批量加载从 postgres 中提取数据

SQL在查询结果中输出行号