【发布时间】:2015-04-14 15:53:38
【问题描述】:
我正在编写一个应用程序来更新单独但相关的数据库表中的数据。我想在我的代码中的事务中执行更新查询。我知道有两种可能的方法:
- 使用System.Data.SqlClient.SqlTransaction 将每个更新封装在一个事务中。
- 使用System.Transactions.TransactionScope 将单独的更新操作封装在一个事务中。
我的问题是:如果进程在中间终止,即如果有人真的强行终止进程,这些模型中的任何一个都会导致事务回滚吗?例如,如果我有这个使用第一个模型的代码并且在两个命令之间终止了进程,那么事务会回滚吗?
try
{
using (var conn = new SqlConnection(connectionString))
{
using (var tran = conn.BeginTransaction("MyTran"))
{
using (var firstCommand = new SqlCommand(firstQuery, conn))
{
firstCommand.ExecuteNonQuery();
}
//PROCESS IS TERMINATED HERE.
using (var secondCommand = new SqlCommand(secondQuery, conn))
{
secondCommand.ExecuteNonQuery();
}
tran.Commit();
}
}
}
catch (Exception)
{
//do whatever.
}
或者如果我有以下代码使用第二个模型并且在两个方法调用之间终止了进程,事务是否会回滚?
try
{
using (var scope = new TransactionScope())
{
MyFirstUpdate();
//PROCESS IS TERMINATED HERE.
MySecondUpdate();
scope.Complete();
}
}
catch (Exception)
{
//do whatever.
}
我无法在 MSDN 或其他地方找到任何信息来说明这两种情况的结果。
【问题讨论】:
标签: c# .net sql-server database transactions