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.

  • 相关阅读:
    关于Django 报错 ImportError: cannot import name RegexUrlResolver解决
    Git版本控制
    java Labmda表达式
    java注解&反射
    maven
    数据库
    为什么java中子类重写父类的方法时声明抛出异常不能比父类范围大
    【Linux】Linux基本命令
    阿里云服务器linux环境搭建SSM项目(一)--Linux环境配置jdk和Tomcat.md
    阿里云服务器linux环境搭建SSM项目(二)--linux环境配置mysql5.7.md
  • 原文地址:https://www.cnblogs.com/rockniu/p/1202263.html
Copyright © 2011-2022 走看看