0

同じデータベースを使用する Web メソッドが約 5 つある ASP.NET Web サービス (C# 4.0) でデータベース接続を開いて再利用するためのベスト プラクティスは何ですか? 理想的には、MS Access と SQL サーバーの答えは同じです。

  1. グローバルプライベート変数:

    a. 利点: データベース プロバイダーを変更した場合の保守が容易

    b. 短所: 'using' 句を使用できず、接続が長時間開いたままになる可能性があります。接続が開いたままになる時間はおよそどれくらいですか?

  2. db 接続をメソッド パラメータとして渡します。

    a. 利点: 'using' 句を使用する必要がない場合は、接続を閉じることができます

    b. 短所:どこでもparamを維持して渡すのが面倒

  3. いずれかのメソッドで必要に応じて、必要に応じて using 句を使用して接続を開いたり閉じたりします。

    a. 質問: 同じ接続を複数回開く必要があるため、これが最も遅いですか? または、舞台裏の接続プールのために、これは遅くありませんか? したがって、これはおそらくベスト プラクティスでしょうか?

    b. 質問: 接続プーリングは SQL サーバーにのみ関連するので、MS Access では機能しませんか?

最初は、グローバル プライベート変数 (OleDbConnection) を使用することを考えていました。これは、メイン データベースへの接続を Web メソッドとサポート メソッドでかなり使用しており、近い将来に MS Access から SQL サーバーに移行するためです。簡単に変更できます。

しかし、 ASP.NET と Web サービスを使用する場合に SQL 接続を最も効率的に取得するなどの記事を読んだ後、

「using」句を使用して、どこでもオンデマンドで新しい接続を作成でき、パフォーマンスに影響を与えないように思えますか?

4

2 に答える 2

1

ASP.Netはデータベース接続をプールするため、これらの低レベルの詳細について心配する必要はありません。この MSDN 記事のヒント 3 をご覧ください。

于 2012-10-10T13:57:55.487 に答える
1

ベスト プラクティスは、Connection オブジェクトをまったく再利用しないことです。

public void GetEmployees() As List<Employee> {
    var employees = new List<Employee>();
    using (var connection = new SqlConnection(Configuration.ConnectionString)) {
        using (var command = connection.CreateCommand()) {
            command.CommandText = "SELECT * FROM dbo.Employee";
            connection.Open();
            using (var reader = command.ExecuteReader()) {
                while (reader.Read()) {
                    employees.Add(Employee.CreateRecordFromOpenReader(reader));
                }
            }
        }
    }

    return employees;
}

次に、これを使用するものからのトランザクションが必要な場合は、DTC をセットアップしてこれを行います。

using (var scope = new TransactionScope()) {
    var employees = GetEmployees();
    employees.Map((e) => e.Status = Status.Active);
    scope.Complete();
}
于 2012-10-10T13:59:51.580 に答える