开发者

How implement Rollback feature?

I want to create a C# applicatio开发者_如何学编程n in which copy some files in two diffrent folders(already contains older version files) and also run sql scripts. During whole process if any exception generate i need to rollback all the changes.

For sql scripts, transation can be used but how implement files copying process with rollback?


Or you can evolve as a software developer and use the Command Pattern and implement a BatchCommand. Commands make it very easy to add undo functionality and encapsulate it in an intelligent way. A BatchCommand can then call undo() on each Command within its list.

For a good primer to patterns, check out Head First Design Patterns


You can take advantage of Transactional NTFS if possible. If not, then you can keep a list of the operations you did and do the reverse of it when a rollback is needed.


You can make a copy from the old file before replacing it, and then if an exception happened restore from this copy.


Would it fit your use case to copy the files to a temporary directory and then move the whole directory into place? If so, rollback is as simple as deleting the temporary directory.


I would copy the new files appending a suffix and a random number, thus avoiding to clash with preexisting file names.

Sample... Old file="myfile.txt", New file="myfile.txt.new.285387".

Then, when the copy process is finished ok, I would... -Rename the old file as "myfile.txt.old.3464353". -Rename the new file as "myfile.txt" -Finally the old will be erased.


Try THis code

  public bool updateusertable(string UserName,string Password,string Datetime)
            {
                bool bResult = false;            
            SqlTransaction tx; 
                try
                {
                    tx=conn.Begintransaction();
                    SqlCommand Ocmd = new SqlCommand();
                    Sqlconnect = Cconnect.OpenSqlConnection();
                    Ocmd.Connection = Sqlconnect;
                    Ocmd.CommandType = CommandType.StoredProcedure;
                    Ocmd.CommandText = "SP_User_login_Update";
                    Ocmd.Parameters.Add("@UserName", SqlDbType.VarChar, 100).Value = UserName;
                    Ocmd.Parameters.Add("@Password", SqlDbType.VarChar, 100).Value = Password;
                    Ocmd.Parameters.Add("@lastlogin", SqlDbType.VarChar, 100).Value = Datetime;
                    int i = Ocmd.ExecuteNonQuery();
                    if (i <= 1)
                    {
                        bResult = true;
                        tx.Commit();
                    }else
                    {
                        tx.Rollback();
                    }
                }
                catch (Exception ex)
                {
                    string msg = ex.Message.ToString();
                    tx.Rollback();
                }
                finally
                {

                }
                return bResult;
            }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜