2011-08-31 62 views
-1

假設我有一個處理匯款的應用程序。.NET中的應用程序崩潰和事務處理

try { 
    transaction.Commit(); 
} catch { 
    transaction.Rollback(); 
} 

現在會發生什麼,如果事實證明,提交已被取消,因某種原因取消或回滾處理之前的程序崩潰? 如何編寫我的應用程序,以便它對程序崩潰具有強大的功能。

編輯: 如果我沒有SQL後端,並且事務是我自己實現的東西?

+0

你的「如果」會使一切無效......如果你沒有數據庫,並且你實現了一個叫胡蘿蔔的對象(或者事務,對我們來說也不清楚),你應該更多地指定你的胡蘿蔔類所做的事情,繼承了什麼以及它是如何實現的! –

回答

1

你的設計是好的(即使非常簡約,在它沒有實際的例子...)

,你可以想像,一旦你打電話var transaction = connection.BeginTransaction();

如果你不叫提交事務不會得到承諾讓捕獲將回滾。

如果由於任何原因崩潰阻止執行catch塊自動回滾將由SQL引擎應用。

2

Db中的數據持久性將僅在之後達到Commit是成功的。所以如果您的Commit在任何位置失敗,數據將不會寫入數據庫。