我们是否需要在同一查询中进行多次更新的事务?
Do we need transaction with more than one update in same query?
我有一个查询有 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
感谢您的帮助。
这取决于问题的答案。你(或你的company/client)是否会松动(miscalculate/miss/omit)一些东西,如果两次更新会成功,而不是删除?或者如果第一次更新成功,第二次更新不成功,删除成功。如果答案是肯定的,那么是的,你需要交易。如果对数据库执行三个操作没有带来任何不一致,那么你不需要事务。
看起来您的命令无论如何都会在单个隐式事务中执行。因此,除非您想将其全部回滚,否则您不会 'need' 显式交易。
我有一个查询有 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
感谢您的帮助。
这取决于问题的答案。你(或你的company/client)是否会松动(miscalculate/miss/omit)一些东西,如果两次更新会成功,而不是删除?或者如果第一次更新成功,第二次更新不成功,删除成功。如果答案是肯定的,那么是的,你需要交易。如果对数据库执行三个操作没有带来任何不一致,那么你不需要事务。
看起来您的命令无论如何都会在单个隐式事务中执行。因此,除非您想将其全部回滚,否则您不会 'need' 显式交易。