3

SQL Server 2000 に接続している Windows Server 2003 Standard Edition SP1 マシンで C# WinForms アプリケーションを実行しようとしたときに、次のエラーを受け取りました。WinForms アプリのデータを変換し、変換したものを SQL Server 2005 アプリケーションに挿入しました。SSPIを使用して各データベースに接続しています。

コードは TransactionScope ブロック内に含まれていました。

System.TimeSpan TransactionTimeOut = new TimeSpan(0, 40, 0);

    using(TransactionScope Scope = new TransactionScope(TransactionScopeOption.RequiresNew, TransactionTimeOut))
    {
        try
        {
            //meat of transaction...
        }
        catch(Exception ex)
        {
            throw ex;
        }

        Scope.Complete();
    }

エラー メッセージ:

例外: トランザクションは既に暗黙的または明示的にコミットまたは中止されています。

内部例外: トランザクションは既に暗黙的または明示的にコミットまたは中止されています (HRESULT からの例外: 0x8004D00E)

この問題の原因を知っている人はいますか?

4

2 に答える 2

5

コードが実行されているマシンで DTC が開始されていることを確認します。transactionscope で 2 つの接続を使用しているため、トランザクションは DTC ベースのトランザクションに昇格します。

また、セキュリティが正しく構成されていること (DTC トランザクションへの匿名の参加を許可してこれを確認します) と、ファイアウォールが DTC の通過を許可していることを確認してください。

このフォーラム FAQ を確認してください:分散トランザクション コーディネーター (MSDTC) およびトランザクション FAQ

[この SO の質問に関連するもの: Distributed Transaction Coordinator ]

于 2009-04-24T00:10:27.697 に答える