【发布时间】:2012-12-24 12:34:24
【问题描述】:
下面是我用于 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
【问题讨论】:
-
当您处置一个实例时,您将无法再使用它 - 连接已关闭,它已准备好进行垃圾回收。为什么必须使用单个命令实例?我只是不明白你的问题尝试更好地解释。
-
this.Cmd.Dispose();当你给 dispose() 时会发生什么?
-
您自己指定问题:您使用了一个
MySqlCommand,而您应该使用两个。 -
@MahaSwetha :实际上在处理它之后什么都没有发生,甚至没有给出错误,我可以毫无问题地使用相同的实例。
-
@C.Evenhuis 是的,但我只能使用一个....有什么办法实际上我必须触发超过 3 个查询并且必须在单一事务中维护所有内容,以便如果有任何事情出错我可以回滚