.Net常用事务(了解一下)

27 篇文章 0 订阅

.Net常用事务

1SQL事务

优点:执行效率最佳

限制:事务上下文仅在数据库中调用,难以实现复杂的业务逻辑。

 

例:

复制代码
代码
 1  CREATE   PROCEDURE  SP_DeleteOrder
 2  (
 3       @OrderID   INT
 4  )
 5  AS
 6       BEGIN   TRANSACTION  DeleteOrder
 7 
 8       DELETE   FROM   [ OrderDetail ]   WHERE  OrderID  =   @OrderID
 9       DELETE   FROM   [ Order ]   WHERE  OrderID  =   @OrderID
10 
11       IF   @@ERROR   >   0
12       BEGIN
13           ROLLBACK   TRANSACTION  DeleteOrder
14       END
15 
16       COMMIT   TRANSACTION  DeleteOrder
17 
复制代码

 

 

2ADO.NET 事务

ADO.NET 中,可以使用Connection Transaction 对象来控制事务。若要执行事务,请执行下列操作:

调用Connection 对象的BeginTransaction 方法来标记事务的开始。

Transaction 对象分配给要执行的CommandTransaction 属性。

执行所需的命令。

调用Transaction 对象的Commit 方法来完成事务,或调用Rollback 方法来取消事务。

 

优点:简单,效率和数据库事务差不多快。
 缺点:事务执行在数据库连接层上,所以你需要在事务过程中手动的维护一个连接。

 

例:

复制代码
代码
 1  SqlConnection conn  =   new  SqlConnection(ConfigurationManager.ConnectionStrings[ " Test " ].ConnectionString);
 2  conn.Open();
 3  SqlTransaction tx  =  conn.BeginTransaction(IsolationLevel.ReadCommitted);
 4  SqlCommand cmd  =   new  SqlCommand();
 5  cmd.Connection  =  conn;
 6  cmd.Transaction  =  tx;
 7 
 8  try
 9  {
10      cmd.CommandText  =   " INSERT INTO [Test]([Name],[Value]) VALUES ('测试1','1') " ;
11      cmd.ExecuteNonQuery();
12      cmd.CommandText  =   " INSERT INTO [Test]([Name],[Value]) VALUES ('测试2','2') " ;
13      cmd.ExecuteNonQuery();
14 
15      tx.Commit();
16  }
17  catch  (Exception ex)
18  {
19      tx.Rollback();
20       throw   new  Exception(ex.Message, ex);
21  }
22  finally
23  {
24      conn.Close();
25  }
26 
复制代码

 

 

3TransactionScope事务

.NET 2.0中新添加了一个名为System.Transactions的命名空间,其提供了一个“轻量级”的、易于使用的事务框架,通过这个框架可以大大简化事务的操作。

 

这个框架提供了如下优点:

1)在简单(不涉及分布式)事务中也可以使用声明式的事务处理方法,而不必使用Com+容器和目录注册。

2)用户根本不需要考虑是简单事务还是分布式事务。它实现一种所谓自动提升事务机制(Promotable Transaction),会自动根据事务中涉及的对象资源判断使用何种事务管理器。

 TransactionScope事务类,它可以使代码块成为事务性代码。并自动提升为分布式事务

 优点:实现简单,同时能够自动提升为分布式事务

 

例:

复制代码
代码
 1  TransactionOptions option  =   new  TransactionOptions();
 2  option.IsolationLevel  =  IsolationLevel.ReadCommitted;
 3 
 4  using  (TransactionScope ts  =   new  TransactionScope(TransactionScopeOption.Required,option))
 5  {
 6       using  (SqlConnection conn  =   new  SqlConnection(ConfigurationManager.ConnectionStrings[ " Test " ].ConnectionString))
 7      {
 8          conn.Open();
 9          SqlCommand cmd  =   new  SqlCommand(conn);
10          cmd.CommandText  =   " INSERT INTO [Test]([Name],[Value]) VALUES ('测试1','1') " ;
11          cmd.ExecuteNonQuery();
12          cmd.CommandText  =   " INSERT INTO [Test]([Name],[Value]) VALUES ('测试2','2') " ;
13          cmd.ExecuteNonQuery();
14      }
15      ts.Complete();
16  }
17 
复制代码

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值