2011-08-05 91 views
1

我需要實現從一個數據庫讀取數據並在兩個其他數據庫(Db2和Db3)中插入/更新數據。所有數據庫都是SQL Server。ADO.NET和使用不同的數據庫

現在我使用的下一個情景:

  • 打開連接,併爲我的源數據庫開始交易。

    1.1打開連接,併爲DB2

    1.2插入/更新記錄開始交易。

    1.3提交/回滾事務

    2.1打開連接和DB3

    2.2插入/更新記錄開始交易。

    2.3提交/回滾事務

  • 標記記錄在源數據庫導出。

  • 提交事務。

一切工作正常。但是如果我在1.2或2.2步中出現異常,則當前事務將被回滾,但其他步驟中的事務將保持承諾。

如何在步驟(1.2或2.2)有異常時執行方案,步驟1.3和2.3的 也會回滾?

我不能用一個交易,DB2和DB3,因爲我有例外

交易或者未與當前連接 相關的或已經完成。

任何想法?

感謝,

更新: 我解決我的問題: 現在我使用的下一個情景:

  • 打開連接,併爲我的源數據庫開始交易。

    1.1打開連接和用於DB1

    啓動事務

    1.2打開連接並用於DB2

    啓動事務

    在DB1 1.3插入/更新

    1.4插入在DB2 /更新

    1.5提交/回滾事務Db1

    1。6 Db2提交/回滾事務

  • 將源記錄中的記錄標記爲導出。

  • 提交事務。

+0

你如何處理時DB1交易成功和DB2交易失敗? – Eranga

回答

1

可以使用TransactionScope類與一個分佈式事務中的多個數據庫進行交互。

using (TransactionScope scope = new TransactionScope()) 
{ 
    //put all logic here 
    scope.Complete(); 
} 

這裏還有一個example

+0

是否有可能在沒有TransactionScope的情況下解決我的問題? – ukraine

+0

@ukraine您可以使用[System.EnterpriseServices](http://msdn.microsoft.com/en-us/library/system.enterpriseservices.aspx)這裏有一個[示例](http://www.codeproject.com/ KB/DOTNET/KdotNET.aspx)。但'TransactionScope'方法很簡單。 – Eranga

相關問題