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.

  • 相关阅读:
    VINS_Fusion 框架
    VINS_Fusion 前端源码解析
    堆与优先队列
    LSD-SLAM简介
    直接法和特征点法的区别与优缺点
    CV::Mat介绍
    C++ 位运算
    OPENCV重要函数
    C++ 优先队列
    特征点法的巅峰之作—ORBSLAM2
  • 原文地址:https://www.cnblogs.com/rockniu/p/1202263.html
Copyright © 2011-2022 走看看