try
            {
                if (State == 1)
                {
                    
                    sqlcmdRegUser.CommandText = "select * from cussecurity";
                    sqlcmdRegUser.Connection = mySqlconn;
                    sqlDaRegUser = new MySqlDataAdapter(sqlcmdRegUser);
                    sqlDaRegUser.Fill(DsRegUser , "cussecurity");
                    DataRow row;
                    DataRow row2;
                    
                    row =DsRegUser.Tables["cussecurity"].Rows.Add();
                。
                    row["User_Desc"] = UserInfo.Expired ;
                    MySqlCommandBuilder mycb = new MySqlCommandBuilder(sqlDaRegUser);
                    sqlDaRegUser.UpdateCommand = mycb.GetUpdateCommand();
                    sqlDaRegUser.UpdateCommand .Transaction = Tran;
                    sqlDaRegUser.InsertCommand = mycb.GetInsertCommand();
                    sqlDaRegUser.InsertCommand.Transaction = Tran;
                    sqlDaRegUser.Update(DsRegUser,"cussecurity");                    sqlcmdRegUser = new MySqlCommand() ;
                    sqlcmdRegUser.CommandText = "select * from customerreginfor";
                    sqlcmdRegUser.Connection = mySqlconn;
                    sqlDaRegUser2 = new MySqlDataAdapter(sqlcmdRegUser);
                    sqlDaRegUser2.Fill( DsRegUser2 ,"customerreginfor");                    row2 = DsRegUser2.Tables["customerreginfor"].Rows.Add();
                    row2["CustomerID"] = UserInfo.CustomerID;
                    。。                  
                    row2["Zip"] = UserInfo.Zip;
                    MySqlCommandBuilder mycb1 = new MySqlCommandBuilder(sqlDaRegUser2);
                    sqlDaRegUser2.UpdateCommand = mycb.GetUpdateCommand();
                    sqlDaRegUser2.UpdateCommand.Transaction = Tran;
                    sqlDaRegUser2.InsertCommand = mycb.GetInsertCommand();
                    sqlDaRegUser2.InsertCommand.Transaction = Tran;
                    sqlDaRegUser2.Update (DsRegUser2);
                    Tran.Commit();                }
                else
                { i = -1; }
                return i; }
            catch {                Tran.Rollback();
                return -1; }
        }
我在测试的过程中代码先运行到第一个UPDATE 中,然后在后边的写上一个出错的值,就会直接跳到 Tran.Rollback();可是发现第一个次写到数据库中的数据拼没有取消,请教大家这是哪里出了问题。

解决方案 »

  1.   

    我用的数据库MYSQL的,但应该不关数据库的问题。
      

  2.   

    sqlDaRegUser.InsertCommand.Transaction = Tran;                    sqlDaRegUser2.InsertCommand = mycb.GetInsertCommand();
                        sqlDaRegUser2.InsertCommand.Transaction = Tran;
    你的事务开始在哪里开始的?
    少了个语句吧
      

  3.   

    我觉得是代码有问题。
    sqlDaRegUser.Update(DsRegUser,"cussecurity");
    sqlDaRegUser2.Update (DsRegUser2);
    这两句话应该放到一起。
    sqlDaRegUser.InsertCommand.Transaction = Tran;
                        sqlDaRegUser.Update(DsRegUser,"cussecurity");都已经提交了。在把一个操作放到事务里头,有用么?
      

  4.   

      public int RegUser()
            {
                int i;
                i = -1;
                MySqlCommand sqlcmdRegUser = new MySqlCommand();
                MySqlDataAdapter sqlDaRegUser;
                 MySqlDataAdapter sqlDaRegUser2;
                DataSet DsRegUser = new DataSet();
                DataSet DsRegUser2 = new DataSet();
                MySqlTransaction Tran = mySqlconn.BeginTransaction();
                try
                {
                    if (State == 1)
                    {
                        
    我有开始的,就在TRY上边,我没有贴出来。
      

  5.   

    我的神啊。竟然不是代码的问题,原来是MYSQL的数据库问题。至于想找答案的,直接找我。分全给第一个回复的人。