在事务处理过程中,一个事务总是要和一个SqlCommand关联,
格式:
   SqlTransaction myTran = cardbConnection.BeginTransaction();
   SqlCommand Cmd = cardbConnection.CreateCommand();
   Cmd.Transaction = myTran;----->要关联起来
   try{
    要执行的语句;     ----------->---------------------------------------------------
    问题在这里,这里执行的sql语句,必须全部通过与事务关联的Cmd来执行,
    若是再定义一个该链接的SqlCommand 变量,执行语句时就会出现异常?????
    ----------->---------------------------------------------------    最后提交;
   }
    catch()
   { 回滚
    }
   
我想要是事务格式是:
   事务开始;
   try{
   中间是操作数据库的多条语句;----> 就是这里事务把所有合法的操作都包含起来,
                                     但不与特定的SqlCommand 关联
   事务正常提交;
   }
   catch(){
     事务回滚
   }我该怎么实现????为了更好的说明问题,给一个示例:
            SqlTransaction myTran;
            myTran = centerConnection.BeginTransaction();
            
            SqlCommand deleteCarTesterCmd = centerConnection.CreateCommand();
            deleteCarTesterCmd.Transaction = myTran;
            SqlCommand carCmd = centerConnection.CreateCommand();
            try {
                deleteCarTesterCmd.CommandText = "delete from test";
                deleteCarTesterCmd.ExecuteNonQuery();                carCmd.CommandText = "delete from test"; ---如果有这两句,就会出现异常??
                carCmd.ExecuteNonQuery();                ---我知道这里可以用deleteCarTesterCmd代替carCmd,
                                                         ---但这里就是为了说明问题,为什么会有异常呢??
                myTran.Commit();
                MessageBox.Show("ok");            
            }
            catch (Exception ex)
            {
                myTran.Rollback();
                MessageBox.Show("回滚");           
            }
高手指点啊。。

解决方案 »

  1.   

    为什么要重新写个SqlCommand变量呢,SqlCommand本身就可以接收sql语句。不管是否用了事物回滚。
      

  2.   

    deleteCarTesterCmd.CommandText = "delete from test";
    deleteCarTesterCmd.ExecuteNonQuery();
    carCmd.Transaction = myTran;
    carCmd.CommandText = "delete from test"; ---如果有这两句,就会出现异常??
    carCmd.ExecuteNonQuery(); ---我知道这里原因是你的SqlConnection已经开始了一个事务,在事务结束前,该连接无法执行事务之外的命令。
      

  3.   

    将所有SqlCommand的Tranaction属性设置同一个事务对象,即deleteCarTesterCmd和carCmdSqlCommand carCmd = centerConnection.CreateCommand();
    之后加上
    carCmd.Transaction=myTran;
      

  4.   

    try 语句中不能对变量进行初始化,只能更改变量值,否则会出错。不知道是不是这个原因