2011-08-05 11 views
1

1つのデータベースからデータを読み込み、2つの他のデータベース(Db2とDb3)にデータを挿入/更新する必要があります。すべてのデータベースはSQL Serverです。ADO.NETと別のデータベースで作業する

  • オープンな接続をして、私のソースDBのトランザクションを開始します。

    は今、私は次のシナリオを使用しています。

    1.1 Db2のオープントランザクションと開始トランザクション

    1.2レコードの挿入/更新。

    1.3

    は/ロールバック・トランザクションに

    2.1オープンな接続をコミットし、Db3は

    2.2挿入/更新レコードのトランザクションを開始します。ソースDBにエクスポートしたよう

    2.3 /ロールバックトランザクション

  • マークレコードをコミットします。

  • トランザクションをコミットします。

すべて正常です。しかし、1.2または2.2ステップで例外が発生した場合、現在のトランザクションはロールバックされますが、他のステップからのトランザクションはコミットされたままになります。

ステップ(1.2または2.2)に例外がある場合、ステップ1.3および2.3 もロールバックされるシナリオをどのように実装できますか?

私は例外

トランザクションが現在の接続 に関連付けられていないしているいずれか、または完了しているので、私はDB2とDb3はのための1つのトランザクションを使用することはできません。

おかげで、

UPDATE: は今、私は次のシナリオを使用しています: は、私は私の問題解決

  • オープンな接続をして、私のソースDBのトランザクションを開始します。

    1.1接続をオープンし、コミットDB2

    に挿入/更新DB1

    1.3に

    1.5を

    1.4を挿入/更新を

    1.2にDb1と

    オープン接続をトランザクションを開始し、DB2

    のためのトランザクションを開始/ Db1のロールバックトランザクション

    1。6 Db2のコミット/ロールバックトランザクション

  • ソースレコードをエクスポート元dbにエクスポートします。

  • トランザクションをコミットします。

+0

がどのようにDb1との取引が成功し、DB2トランザクション・故障時に扱うんですか? – Eranga

答えて

1

あなたは、単一の分散トランザクション内の複数のデータベースと対話するTransactionScopeクラスを使用することができます。

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

はここで別のexample

+0

TransactionScopeなしで私の問題を解決することは可能ですか? – ukraine

+0

@kraine [System.EnterpriseServices](http://msdn.microsoft.com/en-us/library/system.enterpriseservices.aspx)ここでは[例](http://www.codeproject.com/ KB/dotnet/KdotNET.aspx)。しかし、「TransactionScope」アプローチは簡単です。 – Eranga

関連する問題