日期:2014-05-16  浏览次数:21103 次

c#执行事务嵌套的问题
有如下的语句

using (SqlConnection connection = dataWriter.GetConnection())
            {
                connection.Open();
                SqlTransaction tran = connection.BeginTransaction("BatchInsert");
                try
                {                  
                    int K=Do A;//这里,去执行数据库的一个存储过程,返回一个操作成功与否的值
                    if (k==1){ Do B}
                    else 
                    { 
                             returnValue = -1;
                             tran.Rollback();
                    }
                    tran.Commit();
                }
                catch (Exception ex)
                {
                    returnValue = -1;
                    tran.Rollback();
                }

在  Do A 里,数据库的存储过程里也有事务。
那么如果 Do B 失败,程序执行catch段,回滚事务的时候,会不会回滚Do A 里的事务?
------解决方案--------------------
感觉,应该是滚
------解决方案--------------------
滚回只限于数据库。
所以,如果你DO A里的存储过程和当前数据库连接是同一个数据库,那么当外面回滚的时候,里面的操作也会回滚。否则就不会。