0

私はこのようにいくつかのコードを持っています:

private static void Delete(int PaxID)
    {
        using (SqlConnection conn = DataHelper.GetDBConnection())
        {
            using (SqlCommand cmd = DataHelper.GetSPCommand("spDeletePax",conn))
            {
                cmd.Parameters.AddWithValue("@PaxID", PaxID);
                cmd.ExecuteNonQuery();
            }
        }
    }

    public static void DeletePaxes(List<int> ids, string bookingRef, string user)
    {
        using (TransactionScope ts = new DataHelper.CreateTransactionScope())
        {
            foreach (var i in ids)
            {
                Delete(i);
            }
            ts.Complete();
        }
    }

    public static SqlConnection GetDBConnection()
    {
        SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DB"].ConnectionString);
        conn.Open();
        return conn;
    }

    public static TransactionScope CreateTransactionScope()
    {
        var transactionOptions = new TransactionOptions();
        transactionOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
        transactionOptions.Timeout = TransactionManager.MaximumTimeout;
        return new TransactionScope(TransactionScopeOption.Required, transactionOptions);
    }

最近まで問題なく動作していましたが、コードを変更していませんが、ソース管理を VSS から SVN に変更しただけで、VS2012 (2008 ではなく) でプロジェクトを開きました。

DeletePaxes(..)を呼び出すと、最初の削除は機能しますが、DB への接続時に 2 回目のタイムアウトが発生します

私はこれを間違っているだけですか、それとも 2012/.NET4/4.5 ではトランザクションの処理が異なるのでしょうか? 私はいくつかのグーグルを実行しましたが、何も見つかりませんでした(したがって、ここに投稿します)

何が起こっているのか、誰でも教えてもらえますか? 私はこれを間違ってやっていますか?

DTC はセットアップされているので、そうは思わないでください - ソース管理を変更するまで正常に動作していたと言うように.. また、トランザクションをデフォルトのみに変更すると、静的メソッドを使用せずに失敗します.. トランザクションの削除は正常に動作します削除のすべてまたはどれも機能しない必要があるため、トランザクションを使用しています..

ありがとう

4

1 に答える 1

0

わかりました、私を打ち負かすことはありませんが、VM のセットアップに問題があることが判明しました。ネットワーク アダプタはブリッジ アダプタではなく NAT に設定されており、現在はすべて問題ありません。トランザクションが VM に戻る方法を見つけることができなかったため、そこに座っていると推測されます

それを忘れるほど愚かな私かもしれませんが、とにかくすべての返信に感謝します-そして、テーブル値のパラメーターについていくつか読んでいきます

于 2012-11-21T14:35:14.393 に答える