我们是否需要在同一查询中具有多个更新的事务?

时间:2015-01-22 10:15:34

标签: vb.net

我有一个查询,包含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

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这取决于问题的答案。如果两个更新成功,你会(或你的公司/客户)松散(错误计算/错过/省略)某些东西,并且不删除吗?或者,如果第一次更新将成功,第二次更新将不会成功,并且删除将成功。如果答案是肯定的,那么是的,您需要交易。如果在db上执行三个操作没有带来任何不一致,那么您就不需要Transaction。

答案 1 :(得分:1)

看起来你的命令无论如何都会在一个隐式事务中执行。所以,除非你想把它全部卷回来,否则你不需要'明确的交易。