TransactionScope嵌套事物
时间: 2023-08-03 19:24:40 浏览: 184
TransactionScope支持嵌套事务,这意味着可以在一个事务范围内嵌套另一个事务范围。嵌套事务的使用场景是某些操作需要在子事务中独立执行,而不受父事务的影响。下面是一个TransactionScope嵌套事务的代码示例:
```
using (TransactionScope outerScope = new TransactionScope())
{
try
{
// 在外部事务中执行一些操作
using (SqlConnection connection1 = new SqlConnection(connectionString))
{
connection1.Open();
SqlCommand command1 = new SqlCommand("INSERT INTO Customers (Name) VALUES ('Customer 1')", connection1);
command1.ExecuteNonQuery();
}
// 在内部事务中执行一些操作
using (TransactionScope innerScope = new TransactionScope())
{
using (SqlConnection connection2 = new SqlConnection(connectionString))
{
connection2.Open();
SqlCommand command2 = new SqlCommand("INSERT INTO Orders (CustomerId, OrderDate) VALUES ((SELECT TOP 1 Id FROM Customers ORDER BY Id DESC), GETDATE())", connection2);
command2.ExecuteNonQuery();
}
// 提交内部事务
innerScope.Complete();
}
// 提交外部事务
outerScope.Complete();
}
catch (Exception ex)
{
// 回滚事务
Console.WriteLine("Transaction rolled back: " + ex.Message);
}
}
```
在这个示例中,我们在外部事务范围内创建了一个内部事务范围。在内部事务范围中,我们执行了另一个数据库操作,并调用了内部事务的Complete方法来提交内部事务。在外部事务范围中,我们执行了另一个数据库操作,并调用了外部事务的Complete方法来提交外部事务。如果任何一个操作失败,我们就会回滚整个事务。需要注意的是,当嵌套事务提交时,只有最外层的事务提交才会真正提交所有操作,如果内部事务没有被提交,则会将整个事务回滚。
阅读全文
相关推荐


















