mysql事务(提交和回滚)

标签 mysql vb.net

下面是我用于 MySqlTransaction 的代码,它运行得很好...... 但问题是因为我使用的是 mysqlcommand 的单个实例,所以我必须在其中使用唯一的 PARAMETER。这破坏了我的查询。有没有其他方法可以做....

我尝试在每次查询后处理 cmd 但没有用.. :(


          con.Open()
            Dim sqlTran As MySqlTransaction = con.BeginTransaction()
            Dim cmd As MySqlCommand = con.CreateCommand()
            cmd.Transaction = sqlTran
            Dim str As String = Nothing
            Try
                cmd.CommandText = "SELECT myid FROM memaster where    Adate=@adate and ANo=@ano and ASource=@asrc"
                cmd.Parameters.AddWithValue("@adate", txt_bpass_adate.Text)
                cmd.Parameters.AddWithValue("@ano", txt_bpass_af.Text)
                cmd.Parameters.AddWithValue("@asrc", txt_bpass_asource.Text)
                str = cmd.ExecuteScalar()
                'cmd.Dispose()'
                If str Is Nothing Then

                    cmd.CommandText = "Insert into memaster (ADate,ANo,ASource) values (@aDate,@aNo,@aSRC)"
                    cmd.Parameters.AddWithValue("@aDate", txt_bpass_adate.Text)
                    cmd.Parameters.AddWithValue("@aNo", txt_bpass_af.Text)
                    cmd.Parameters.AddWithValue("@aSRC", txt_bpass_asource.Text)

     cmd.ExecuteNonQuery()
    End If
     sqlTran.Commit()

            Catch ex As Exception
                Try
                    sqlTran.Rollback()
                Catch ex1 As Exception

                End Try
            End Try

我实际上想在单个事务中触发超过 4 个查询,这样如果出现任何问题我可以回滚它...

如果有人有任何其他方法,请与我分享这个概念......


     For index As Integer = 1 To 5
                    cmd.CommandText = "Insert into detail (ID,BNos,SNo) values (@FID1,@BNo,@SeqN1)"
                    cmd.Parameters.AddWithValue("@FID1", str)
                    cmd.Parameters.AddWithValue("@BNo", str1)
                    cmd.Parameters.AddWithValue("@SeqN1", txt_bpass_sqn1.Text)
                    cmd.ExecuteNonQuery()


                Next

最佳答案

要在同一事务中执行多个命令,请确保将事务对象分别分配给每个命令:

Dim selectCmd As MySqlCommand = con.CreateCommand()
Dim insertCmd As MySqlCommand = con.CreateCommand()

selectCmd.CommandText = "SELECT ..."
insertCmd.CommandText = "INSERT ..."

Dim sqlTran As MySqlTransaction = con.BeginTransaction()
Try
  selectCmd.Transaction = sqlTran
  insertCmd.Transaction = sqlTran

  ...selectCmd.ExecuteScalar()...
  ...insertCmd.ExecuteNonQuery()...

  sqlTran.Commit()
Catch
  sqlTran.Rollback()
End Try

正如其他人所提到的,通常在您完成对对象(即 IDisposable)的处理后立即对其进行 Dispose() 处理是个好主意。处置对象后,它们将无法再使用。

关于mysql事务(提交和回滚),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14252560/

相关文章:

mysql - 在 concat 中为具有特定图像类型的图像添加查询,例如 MySql 中的配置文件或海报选择

c# - 自定义XML序列化,如何编写自定义根元素?

vb.net - 单元测试和 VB.NET

php - 在 PHP/MySQL 中运行周一和周日之间的查询

mysql - 将值插入相关表的 SQL 命令

php - Laravel,从末尾选择数据库,但按升序排列

c# - 确保用户上传的图片大小不超过 1MB 的最佳方法

.net - 如何更改包含数据的 DataTable 中的列数据类型?

VB.NET 窗体高度问题

mysql - SQL 从两个链接表中选择