日期:2014-05-17  浏览次数:20816 次

做UPDATE操作时command.ExecuteNonQuery();如何回滚?
在C#中需要做一个UPDATE处理,现不知道其中列表中总共有多少条记录需要更新,当在执行过程中间发生了更新错误,如何让前面和后面所有的数据都回滚为更新之前的状态?
如:
需更新的数据为10行,
int result =command.ExecuteNonQuery();当result=5时出现更新错误(错误原因暂不深究),后面及前面的所有数据都回滚。
在程序中如何写代码?
如果用Try{}catch{}语句如何返回这个错误?

------解决方案--------------------
你把它放在事务里面 
using(//事务)
{
 try
 {
int result =command.ExecuteNonQuery();
trans.Commit(); //提交事务
 }
 catch()
 {
trans.Rollback(); //回滚事务
 }
}
------解决方案--------------------
如果你指的是数据库回滚就用事务,如果指的是程序内存回滚就自己写逻辑吧,不会特别复杂。
------解决方案--------------------
C# code

            using (SqlCommand cmd = con.CreateCommand())
            {
                SqlTransaction tran = con.BeginTransaction();
                cmd.Transaction = tran;
                try
                {
                    foreach (string item in strSQL)
                    {
                        cmd.CommandText = item;
                        cmd.ExecuteNonQuery();

                    }

                    tran.Commit();//如果都成功那么提交事物

                }
                catch (Exception ex)
                {
                    index = -1;
                    //throw new Exception(ex.Message);
                    tran.Rollback();
                }

                //index = com.ExecuteNonQuery();
            }