簡體   English   中英

如何實現回滾功能?

[英]How implement Rollback feature?

我想創建一個C#應用程序,其中復制兩個不同文件夾中的一些文件(已包含舊版本文件)並運行sql腳本。 在整個過程中,如果生成任何異常,我需要回滾所有更改。

對於sql腳本,可以使用轉換但是如何通過回滾實現文件復制過程?

如果可能,您可以利用Transactional NTFS 如果沒有,那么您可以保留所做操作的列表,並在需要回滾時執行相反的操作。

或者您可以作為軟件開發人員發展並使用命令模式並實現BatchCommand。 通過命令,可以非常輕松地添加撤消功能並以智能方式對其進行封裝。 然后,BatchCommand可以在其列表中的每個Command上調用undo()。

有關模式的良好入門,請查看Head First Design Patterns

您可以在替換之前從舊文件中復制,然后如果發生異常,則從此副本還原。

它是否適合您的用例將文件復制到臨時目錄,然后將整個目錄移動到位? 如果是這樣,回滾就像刪除臨時目錄一樣簡單。

我會復制附加后綴和隨機數的新文件,從而避免與預先存在的文件名沖突。

示例...舊文件=“myfile.txt”,新文件=“myfile.txt.new.285387”。

然后,當復制過程完成時,我會... - 將舊文件重命名為“myfile.txt.old.3464353”。 - 將新文件重命名為“myfile.txt” - 最后舊文件將被刪除。

試試這個代碼

  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;
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM