zoukankan      html  css  js  c++  java
  • .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 
  • 相关阅读:
    使用rem来开发你的移动端网站
    在网页布局中合理使用inline formating context(IFC)
    构建OLAP CDP平台 Maven父子项目
    2014世界杯决赛观后感
    2013岁末总结
    11月11日上班杂谈
    这一年
    湖南联通发福利了C#为你月赚150M流量回家过年不再愁
    C# 实现对接电信交费易自动缴费 续(winio/winring0 自动填密码)
    C# 实现对接电信交费易自动缴费
  • 原文地址:https://www.cnblogs.com/libingql/p/1805808.html
Copyright © 2011-2022 走看看