public static int DoTransaction(string addUser,SqlParameter [] userPars,string addUserInfo,SqlParameter [] userInfoPars,string addForgetPass,SqlParameter [] fps)
        {
            SqlTransaction tran = Conn.BeginTransaction();  
            try
            {
            SqlCommand comUsers = new SqlCommand(addUser, Conn);
            comUsers.CommandType = CommandType.StoredProcedure;
            comUsers.Parameters.AddRange(userPars);
            comUsers.Transaction = tran;            SqlCommand comUserInfo = new SqlCommand(addUserInfo, Conn);
            comUserInfo.CommandType = CommandType.StoredProcedure;
            comUserInfo.Parameters.AddRange(userInfoPars);
            comUserInfo.Transaction = tran;            SqlCommand comFs = new SqlCommand(addForgetPass, Conn);
            comFs.CommandType = CommandType.StoredProcedure;
            comFs.Parameters.AddRange(fps);
            comFs.Transaction = tran;            comUsers.ExecuteNonQuery();
            comUserInfo.ExecuteNonQuery();
            comFs.ExecuteNonQuery();
            tran.Commit();
            return 1;
            }
            catch(Exception ex)
            {
               return 0;
            }
            finally
            {
                tran.Dispose();
            }
        }在comFs执行ExecuteNonQuery的时候出错,为什么我查询数据库的时候上面2条语句已经执行,并没有回滚。仔细看看自己的代码跟网上的对比都一样啊。为什么就不回滚呢,由于是第一次使用这个类,所以请教各位下。
我曾经试过
在catch中加入rollback,但是运行时直接提示tran关闭,不能继续使用。    所以去掉了rollback
在这里先谢谢看帖的人了

解决方案 »

  1.   

    你的rollback没有写进去 所以没有执行回滚。return 1;
    是怎么回事呢?去掉Return 1;  加入Rollback();
      

  2.   

    还有 comUsers.Transaction = tran;
     看着比较古怪。这些都不需要了吧只要try里面出错  他就会回滚的.
      

  3.   

    你用到了try....catch   catch里面没做处理应该加上这句
    tran.RollBack();
      

  4.   

    using(TransactionScope scope = new TransactionScope())
    {
    //方法1   
    //方法2
    scope.Complete();
      

  5.   

    我记得需要先写 tran.begin 的,就是要先开始事务。catch(Exception ex)
                {
                   return 0;
                }这么处理太简单了,你根本就无法知道出了什么问题,错误信息是什么。
      

  6.   

                SqlConnection conn = new SqlConnection(strconn);
                conn.Open();
                SqlCommand comm = new SqlCommand();
                SqlTransaction Trans;
                Trans = conn.BeginTransaction();
                comm.Connection = conn;
                comm.Transaction = Trans;            
                try            
                {           
                    Trans.Commit();
                }
                catch
                {
                    Trans.Rollback();
                    //出现错误,事务回滚!
                 }
                finally
                {
                } 自己套吧,哈哈
      

  7.   


     catch (Exception ex)
                    {
                        transaction.Rollback();
                        throw new Exception(ex.Message);
                    }
      

  8.   


    在catch中加入rollback,但是运行时直接提示tran关闭,不能继续使用。 所以去掉了rollback这是一个返回int型
    若无异常,说明操作成功  return 1。
    若出现异常  则return 0
    在页面处理的时候根据返回的数来判断是否成功
      

  9.   

    SqlTransaction的实例没用begin方法,它的开始应该是Conn.BeginTransaction()
      

  10.   

    正解        public static int DoTransaction(string addUser,SqlParameter [] userPars,string addUserInfo,SqlParameter [] userInfoPars,string addForgetPass,SqlParameter [] fps)
            {
                SqlCommand com = new SqlCommand();
                com.Connection = Conn;
                com.CommandType = CommandType.StoredProcedure;
                SqlTransaction tran = Conn.BeginTransaction();
                com.Transaction = tran;
                try
                {
                    com.CommandText = addUser;
                    com.Parameters.AddRange(userPars);
                    com.ExecuteNonQuery();                com.CommandText = addUserInfo;
                    com.Parameters.AddRange(userInfoPars);
                    com.ExecuteNonQuery();                com.CommandText = addForgetPass;
                    com.Parameters.AddRange(fps);
                    com.ExecuteNonQuery();
                   tran.Commit();
                   return 1;
                }
                catch(Exception ex)
                {
                    tran.Rollback();
                   return 0;
                }
                finally
                {
                    tran.Dispose();
                }
            }
      

  11.   

    public static int DoTransaction(string addUser,SqlParameter [] userPars,string addUserInfo,SqlParameter [] userInfoPars,string addForgetPass,SqlParameter [] fps)
     { 
                int flag = 0;
                SqlConnection Conn = new SqlConnection();
                Conn.ConnectionString = "连接字符串";
                SqlTransaction tran = Conn.BeginTransaction();
                SqlCommand comUsers = new SqlCommand();
                comUsers.Connection = Conn;
                comUsers.Transaction = tran;
                comUsers.CommandType = CommandType.StoredProcedure;
                try
                {
                    
                    comUsers.Parameters.AddRange(userPars);
                    comUsers.ExecuteNonQuery();                comUsers.Parameters.AddRange(userInfoPars);
                    comUsers.Transaction = tran;
                    comUsers.ExecuteNonQuery();
                    comUsers.Parameters.AddRange(fps);
                    comUsers.Transaction = tran;
                    comUsers.ExecuteNonQuery();
                    tran.Commit();
                    flag= 1;
                }
                catch (Exception ex)
                {
                    tran.Rollback();
                }
                finally
                {                tran.Dispose();
                }
                return flag;
     }写了个 拿去测试吧