[英]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.