zoukankan      html  css  js  c++  java
  • sql中的Tran和C#中的TransactionScope介绍

    sql 中的Tran 俩种写法

    第一种写法 try catch:

    Begin TRY
        Begin Tran transaction
        
            DECLARE @ServiceOrderId INT 
            SET @ServiceOrderId=73342
            DECLARE @ErrorCount  INT 
            SET @ErrorCount = 0
            --调整积分通订单状态 支付完成
            UPDATE dbo.ServiceOrderNew
            SET OrderStatus = 2,UpdateDate = GETDATE()
    
            WHERE  ServiceOrderID = @ServiceOrderId
    
    
            --调整订单详细
            UPDATE dbo.ServiceOrderNewDetail
            SET DetailStatus = 2
            WHERE ServiceOrderID = @ServiceOrderId 
    
        Commit Tran transaction
        END TRY
            BEGIN CATCH
        ROLLBACK Tran transaction
    END CATCH

    第二种写法 用错误积累:

    DECLARE @ServiceOrderId INT 
    SET @ServiceOrderId=73342
     
    BEGIN TRAN  A
            DECLARE @ErrorCount  INT 
            SET @ErrorCount = 0
            --调整积分通订单状态 支付完成
            UPDATE dbo.ServiceOrderNew
            SET OrderStatus = 2,UpdateDate = GETDATE()
         
            WHERE  ServiceOrderID = @ServiceOrderId
            
            SET @ErrorCount=@ErrorCount+@@error
    
            --调整订单详细
            UPDATE dbo.ServiceOrderNewDetail
            SET DetailStatus = 2
            WHERE ServiceOrderID = @ServiceOrderId
           
            
            SET @ErrorCount=@ErrorCount+@@error
            --付款状态
            UPDATE dbo.ScorePayApply
            SET ApplyStatus = 2
            WHERE  ScorePayApplyID = (SELECT TOP 1 ScorePayApplyID FROM ServiceOrderNewDetail WHERE ServiceOrderID = @ServiceOrderId)
            
             SET @ErrorCount=@ErrorCount+@@error
           
             SET @ErrorCount=@ErrorCount+@@error
             
      IF @ErrorCount=0 
          BEGIN   
            COMMIT TRAN  A
          END 
      ELSE   
          BEGIN   
            ROLLBACK TRAN  A
          END 

    第二 TransactionScope用法

     using (TransactionScope tran = new TransactionScope())
            {
                try
                {
                    ServiceItemDataAccess.ServicesConfirmPayment(serviceOrderId, remark, serviceId);
                    //提交事务
                    tran.Complete();
                }
                catch (Exception ex)
                {
                    return ex.ToString();
                }
                finally
                {
                    tran.Dispose();
                }
            }

    TransactionScope 是一个轻量级的事物,在using中,若程序报错,则自动回滚。tran.Complete();是指程序成功,提交。 tran.Dispose(); 释放和销毁。

    欢迎大家提出意见,尤其是在介绍时的意见,本人逻辑思维不是很严谨,所以导致要么叙述啰嗦,要么 说明不是很清楚

  • 相关阅读:
    算法总结--排序(快排未写)
    关于我,至目前的总结与展望
    二 python之数据类型和字符编码
    三 python之文件处理
    一 python编程基础
    markdown语法
    规模-复杂世界的简单法则---熵
    块级元素display:inline-block 在IE6 IE7无效
    CSS3 文本超出后显示省略号...
    让nodejs在iis上运行
  • 原文地址:https://www.cnblogs.com/q101301/p/4646146.html
Copyright © 2011-2022 走看看