-1

複数のシステムでデータベーストランザクション(レコードの挿入)を行おうとしています。そこで、.netでSystem.Transaction名前空間を使用することにしました。両方のシステムでMSDTCを構成しました(ただし、正しく構成したかどうかはわかりません)。私のトランザクションには2つの挿入クエリがあり、1つはローカルシステムで実行されます。もう1つは、ローカルネットワーク内の他のシステムで実行されます。最初の挿入クエリは正常に機能しますが、2番目の挿入クエリは次のようなエラーを発生させます。メッセージ="トランザクションはすでに暗黙的または明示的にコミットまたは中止されています。"


これが私のコードです

    using (TransactionScope txSc = new TransactionScope())
    {
        //vrm = new VolatileRM();
        //vrm.SetMemberValue(3);
        try
        {
            using (SqlConnection cn = new SqlConnection(connStr1))
            {
                SqlCommand cmd = cn.CreateCommand();
                cmd.CommandText = "Insert into empdetail Values ('YYY')";
                cn.Open();
                cmd.ExecuteNonQuery();
                cn.Close();
            }
            using (SqlConnection cn = new SqlConnection(connStr))
            {
                SqlCommand cmd = cn.CreateCommand();
                cmd.CommandText = "Insert into stu Values ('23','senthil')";
                cn.Open();
                cmd.ExecuteNonQuery();
                cn.Close();
            }                    
            txSc.Complete();
        }
        catch (Exception e)
        {
            txSc.Dispose();
        }

    }
4

1 に答える 1

3

まず、DTCが実際に(ローカルシステムとリモートシステムで)実行されていることを確認してから、両方のDTCの認証を「匿名」に設定して、アクセス許可の問題かどうかを確認します。

また、リモートマシンとローカルマシンのファイアウォール設定を確認してください。

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

MSDTCサービスの構成

このSOの質問に関連:HRESULT:0x8004D00E using TransactionScope-C#

于 2009-04-28T06:32:09.510 に答える