有个功能 需要以下操作
第一 向A表添加一个信息 当成功后执行第二
第二 向B表添加一个信息 此处 就容易出现问题 
问题是 当向B表添加失败时 就同时取消第一步操作,没有试用存储过程。需要在.NET 后台代码中处理 请教该怎么用事务操作?

解决方案 »

  1.   

     SqlConnection con = new SqlConnection(ConnectionDb.conStr);//获取数据库连接
            con.Open();//打开连接
            SqlTransaction sqltra = con.BeginTransaction();//开始事务
            SqlCommand cmd = new SqlCommand();//实例化
            cmd.Connection = con;//获取数据连接
            cmd.Transaction = sqltra;//,在执行SQL时,
            try
            {
                string sql = "";//向A表添加一个信息的SQL
                cmd.CommandText = sql;
                cmd.ExecuteNonQuery();
            
                 string sql = "";
                cmd.CommandText = sql;//向B表添加一个信息的SQL
                cmd.ExecuteNonQuery();            sqltra.Commit();
            }catch(Exception ex)
            {
                sqltra.Rollback();
            }
    这样既可。
      

  2.   

    using(TransactionScope scope = new TransactionScope())

    //方法一 
    //方法二
    scope.Commit() ; 
    }
      

  3.   

    定义个全局(静态)列表,用于往列表分散的增加SQL字符串,2个操作完成后执行多个SQL语句的事务
      

  4.   


    --也可以写个存储过程判断--
    create proc ceshi
    (
    @par1 int,@par2 varchar(50),@output int
    )
    declare @count int
    insert into table1(par) values(@par2)
    set @count = @@rowcount
    if(@count=1)
    begin
    insert into table2(par) values(@par2)
    set @count=1
    end
    else
    set @count=-1
    --不过这个还是事务比较灵活--