我有一个查询,包含2个更新和1个删除。 我想用一个executeNonQuery做所有这些。 在这种情况下我是否需要交易?
Public Shared Sub Remove(ByRef userData As IUser, ByVal itemID As Integer)
Dim conn As DbConnection = DbProvider.GetDbConnection(ConnectionStringHelper.GetConnectionString(userData))
Dim cmd As DbCommand
Const SQL As String = " UPDATE d " _
& " SET DescriptionID = null " _
& " FROM table1 AS d " _
& " WHERE DescriptionID = @itemID " _
& " UPDATE cv " _
& " SET DescriptionID = null " _
& " FROM table2 AS cv " _
& " WHERE DescriptionID = @itemID " _
& " DELETE FROM table3" _
& " WHERE ItemID=@itemID AND CandidateID = @UserID AND CandidateID IS NOT NULL "
cmd = DbProvider.GetDbCommand(SQL, conn)
cmd.Parameters.Add("@ItemID", DbType.Int32).Value = itemID
cmd.Parameters.Add("@UserID", DbType.Int32).Value = userData.UserID
Try
conn.Open()
cmd.ExecuteNonQuery()
Finally
conn.Close()
conn.Dispose()
cmd.Dispose()
End Try
End Sub
感谢您的帮助。
答案 0 :(得分:1)
这取决于问题的答案。如果两个更新成功,你会(或你的公司/客户)松散(错误计算/错过/省略)某些东西,并且不删除吗?或者,如果第一次更新将成功,第二次更新将不会成功,并且删除将成功。如果答案是肯定的,那么是的,您需要交易。如果在db上执行三个操作没有带来任何不一致,那么您就不需要Transaction。
答案 1 :(得分:1)
看起来你的命令无论如何都会在一个隐式事务中执行。所以,除非你想把它全部卷回来,否则你不需要'明确的交易。