在進行數據持久化的時候,我們會經常用到事務處理。一般情況下,ADO.NET中的事務處理就能夠滿足我們的需要,但是,ADO.NET中的事務不能同事對多個數據庫連接進行原子性的操作;如果在你的業務環境中存在多個數據庫、文件寫入等操作,同時需要保證數據完整性和一致性的時候,你可以考慮使用.NET提供的分布式事務處理。
使用分布式事務處理,需要Windows系統的支持,所以,我們需要將系統的MSDTC服務開啟。步驟:管理工具>組件服務;依次展開 控制台根節點>組件服務>計算機>我的電腦;在“我的電腦”節點上右鍵打開“屬性”;在選項卡中勾選“使用本地協調器”,然後點擊“確定”按鈕,如下圖:
設置完成以後,我們就可以很方便的使用分布式事務處理了。首先,在項目中添加“System.Transactions”引用,然後編寫如下代碼:
{
以上這段代碼是執行事務的核心代碼,你只需要將要執行代碼作為一個委托傳入InvokAction,並出入一個超時時間就可以了。在事務執行結尾,調用Complete方法,可以將事務提交。如果沒有調用Complete方法,即使事務執行完成,也不會進行提交。如果出現異常,所有代碼都不會改變。
----------------------------------------------------------
ps:
1.還發現一個問題,數據庫也需要開啟分布式事務的支持:右鍵“服務器連接”的屬性,在打開的屬性窗口選擇“連接”,在窗口右側,勾選“需要將分布式事務用於服務器到服務器的通信”,確定即可。
2.需要打開分布式的端口,端口號是135,或者添加System32下msdtc.exe的例外。
3.跨域的情況有待考究。
4.在事務中,即使存在嵌套的情況,同一個事務內的所有數據庫連接對數據都是可訪問的。
5.在事務中,如果使用Response.Redirect()方法跳轉到其它頁面,事務將無法提交!