zoukankan      html  css  js  c++  java
  • ADO.NET嵌套SQL事务一例

    C#代码:

     SqlConnection conn = new SqlConnection("Data Source=192.168.1.200;Initial Catalog=PBCRM;Persist Security Info=True;User ID=sa;Password=123456");
                conn.Open();
                SqlTransaction tran 
    =  conn.BeginTransaction();
                SqlCommand cmd 
    = new SqlCommand("exec CRM_SPGenProfileRevision 10, '1', 1",conn, tran);         
                
    int row = cmd.ExecuteNonQuery();
                
    //trans.Rollback();
                tran.Commit();
                conn.Close();


    SQL存储过程代码:

    ALTER PROCEDURE [dbo].[CRM_SPGenProfileRevision]
    @FormKey        int,
    @Source            varchar(20),
    @UserKey        int
    AS 
    -- ====================================================
    --
     Author:        Rock Niu
    --
     Create date: 2008-03-03
    --
     Description:    Generate a revision for specified form
    --
     Test:        EXEC [dbo].[CRM_SPGenProfileRevision] 945,'Ad-Hoc',18
    --
     ====================================================
    begin
        
    declare    @currentVersion    int
                
    @IsCompany    bit
                
    @versionKey int
                
    @submitKey int,
                
    @trans int
                
    @error nvarchar(max),
                
    @formType varchar(50);

        

        
    begin try
                
    set     @trans = @@trancount;
                
                
    if (@trans>0)
                    
    begin
                        
    save tran localTran;
                    
    end            
                
    else
                    
    begin
                        
    begin tran;
                    
    end

                .
            
    if (@trans=0)
                
    begin
                    
    commit tran;
                
    end    
        
    end try
        
    begin catch
            
    --rollback any transction if error occurred.
            set @error =  error_message();
            
    if (XACT_STATE() <> 0)
                
    begin
                    
    if (@trans>0)
                        
    begin
                            
    rollback tran localTran;
                        
    end        
                    
    else
                        
    begin
                            
    rollback tran;
                        
    end
                
    end    
            
    raiserror 99999 @error;
        
    end catch
        
        
    select @currentVersion as 'NewVersion';
    end

    执行结果,成功时两个事务一起commit,有错误时,两个事务一起rollback.

  • 相关阅读:
    2019牛客暑期多校训练营(第二场)H Second Large Rectangle
    HDU -1506 Largest Rectangle in a Histogram&&51nod 1158 全是1的最大子矩阵 (单调栈)
    吉哥系列故事——完美队形II(马拉车算法)
    Theme Section
    激光雷达和毫米波雷达
    模型压缩95%:Lite Transformer,MIT韩松等人
    分布式深度学习DDL解析
    TOF摄像机可以替代Flash激光雷达吗?
    毫米波雷达分类和技术方案
    高精地图与自动驾驶(下)
  • 原文地址:https://www.cnblogs.com/rockniu/p/1202263.html
Copyright © 2011-2022 走看看