[英]Roll back in c#
我有2個表查詢和詳細信息。 在保存按鈕上單擊我已寫入
fbsave();
fbsavedetails();
fbsave()
將數據保存在查詢表中, fbsavedetails()
將數據保存在詳細信息表中。
現在,如果fbsavedetails()發生錯誤,則兩個步驟都應該回滾。
可能嗎?
您可以顯式創建一個事務並傳遞它,即
using(var connection = ...)
{
connection.Open();
using (var tran = connection.BeginTransaction())
{
try
{
FBSave(connection, tran);
FBSaveDetails(connection, tran);
tran.Commit();
}
catch
{
tran.Rollback();
throw;
}
}
}
請注意,此處還必須在每個命令上設置Transaction
,因此需要將其傳入,並且所有命令必須位於同一連接對象上。
或者:您可以使用TransactionScope
; 重要的是,在TransactionScope
內部發生Open()
以獲得自動登記:
using(var tran = new TransactionScope())
{
FBSave();
FBSaveDetails();
tran.Complete();
}
要么:
using(var tran = new TransactionScope())
using(var connection = ...)
{
connection.Open();
FBSave(connection);
FBSaveDetails(connection);
tran.Complete();
}
使用TransactionScope
方法,您不需要設置任何特殊的東西 - 大多數都是自動的。 您當然可以選擇將連接傳遞給方法,但是它們也可以獲得自己的連接,並且在大多數情況下它可以正常工作。
您可以使用TransactionScope。
using(var scope = new TransactionScope())
{
//Complete the transaction only when both inserts succeed.
scope.Complete();
}
如果您沒有完成transactioncope,它將被回滾。
有兩種方法可以解決這個問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.