SqlConnection connection = myConnection.getConnection();
                connection.Open();
                SqlCommand CMD = new SqlCommand();
                CMD.CommandType = CommandType.StoredProcedure;
                SqlTransaction tran = connection.BeginTransaction();
                CMD.Transaction = tran;                try
                {                    CMD.CommandText = "insertUserMDB";
                    myCommand.Parameters.Add("@UserID", SqlDbType.NVarChar, 50);
                    myCommand.Parameters["@UserID"].Value = UserID;//用户ID
                    CMD.CommandText="UpdateUserGDB";
                    myCommand..........
                    myCommand..........
                    myCommand..........
                    sqlTran.Commit();
                }
                catch
                {
                 tran.Rollback();
                } 
                finnaly
                 {
                  connection.Close();
                 } 
---------------------------------------
问题:在 try里面的存储过程很多,看起来就很凌乱
请问能否把他写成某种方法进行调用
比方CMD.CommandText="user.Insert(UserID)";//这个肯定不对,只是这样的形式
等待您的回复!
 

解决方案 »

  1.   

      SqlConnection con = new SqlConnection();
                con.ConnectionString=ConfigurationManager.ConnectionStrings["DSN"].ConnectionString;
                con.Open();
                //启动一个事务。
               SqlTransaction myTran = con.BeginTransaction();
                //为事务创建一个命令,注意我们执行双条命令,第一次执行当然成功。我们再执行一次,失败。
                //第三次我们改其中一个命令,另一个不改,这时候事务会报错,这就是事务机制。
                SqlCommand myCom = new SqlCommand();
                myCom.Connection = con;
                myCom.Transaction = myTran;
                try
                {
                    myCom.CommandText = "insert into SqlAction values ('测试2','111')";
                    myCom.ExecuteNonQuery();
                    myCom.CommandText = "insert into SqlAction values ('测试3','111')";
                    myCom.ExecuteNonQuery();
                    myTran.Commit();
                    Response.Write("成功执行");
                }
                catch (Exception Ex)
                {
                    myTran.Rollback();
                    //创建并且返回异常的错误信息
                    Response.Write(Ex.ToString());
                    Response.Write("写入数据库失败");
                }
                finally
                {
                    con.Close();
                }
     
            }
        }
      

  2.   

            public bool AddHotel(Hotel hotel,string username,string password,out int hotelID)
            { 
               
                pweb_SQL pwebsql = new pweb_SQL();
                pweb_user pwebuser = new pweb_user();
                pwebsql.Comm.Transaction = pwebsql.Conn.BeginTransaction();
                try
                {
                    int row = pwebsql.Comm.ExecuteNonQuery();
                    //提交事务
                    pwebsql.Comm.Transaction.Commit();                              if (rows >= 0 && row >= 0)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                catch
                {
                    //回滚事务
                    pwebsql.Comm.Transaction.Rollback();
                    hotelID = 0;              
                    return false;
                    
                }        }
      

  3.   

    先一个方法 
            public bool AddHotel(Hotel hotel,string username,string password,out int hotelID)
            { 
               
                pweb_SQL pwebsql = new pweb_SQL();
                pweb_user pwebuser = new pweb_user();
                pwebsql.Comm.Transaction = pwebsql.Conn.BeginTransaction();
                try
                {
                    int row = pwebsql.Comm.ExecuteNonQuery();
                    //提交事务
                    pwebsql.Comm.Transaction.Commit();                              if (rows >= 0 && row >= 0)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                catch
                {
                    //回滚事务
                    pwebsql.Comm.Transaction.Rollback();
                    hotelID = 0;              
                    return false;
                    
                }        }
    然后调用这个方法
      

  4.   

    yuan74521940 的和我的一样。你的直接使用sql语句,我的使用存储过程
      

  5.   

    回复:suyiming 
    你的这样完成是单个回滚,我要实现多个完成后才回滚!
      

  6.   

    先写一个方法 然后在事件那调用这个方法
            public bool AddHotel(Hotel hotel,string username,string password,out int hotelID)
            { 
               
                pweb_SQL pwebsql = new pweb_SQL();
                pweb_user pwebuser = new pweb_user();
                pwebsql.Comm.Transaction = pwebsql.Conn.BeginTransaction();
                try
                {
                    int row = pwebsql.Comm.ExecuteNonQuery();
                    //提交事务
                    pwebsql.Comm.Transaction.Commit();                              if (rows >= 0 && row >= 0)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                catch
                {
                    //回滚事务
                    pwebsql.Comm.Transaction.Rollback();
                    hotelID = 0;              
                    return false;
                    
                }        }
      

  7.   

    没有意义啊,你把cmd的执行分出来,再提供一个方法,将cmd的执行放在里面.还是要写这些东西的.
      

  8.   

    其实我明白你的意思.
    比如你实例化了一个user,然后执行方法 bll.add(user)你想在现有基础上加上事务处理,希望的是这样的写法对吧
    x.BeginTrans();
    bll.add(user);
    y.Errors==0? x.Rollback:x.commit..经过几层转换了,这个希望不现实,另外,add方法里调用的connection你不可能一直保存吧,
    或者你在 add之前,实例化一个connection,再把connection做为参数放在add方法里.
    实现是可以的,但结构全被打乱了,这种做法很不好.
      

  9.   

    建议写在存储过程里.
    存储过程加多一个输出参数, 当rollback时将此参数置0,否则(即commit)置1, add方法取这个参数值就可以了.
      

  10.   

    fcuandy 
    有点建设性意见
    此贴无满意答案!
    为给分结贴!