7

SQL接続のベストプラクティスは何ですか?

現在、私は以下を使用しています:

using (SqlConnection sqlConn = new SqlConnection(CONNECTIONSTRING))
{
    sqlConn.Open();
    // DB CODE GOES HERE
}

これはSQL接続を行うための非常に効果的な方法であることを読みました。デフォルトではSQLプーリングがアクティブであるため、usingコードが終了するとSqlConnectionオブジェクトは閉じられて破棄されますが、DBへの実際の接続はSQL接続プールに入れられます。私はこれについて間違っていますか?

4

4 に答える 4

14

それがほとんどです。考慮すべきいくつかの追加のポイント:

  • 接続文字列はどこで入手できますか?いたるところにハードコーディングする必要はなく、セキュリティで保護する必要があるかもしれません。
  • 多くの場合、接続( SqlCommand、、、 )を実際に使用する前に、他のオブジェクトも作成する必要があり、接続を開くまでできるだけ長く待機する必要があります。完全なパターンはそれを説明する必要があります。SqlParameterDataSetSqlDataAdapter
  • データベースアクセスがそれ自体のデータレイヤークラスまたはアセンブリに強制されていることを確認する必要があります。したがって、一般的に行うことは、これをプライベート関数呼び出しとして表現することです。

private static string connectionString = "load from encrypted config file";
private SqlConnection getConnection()
{
    return new SqlConnection(connectionString);
}

そして、次のようにサンプルを記述します。

using (SqlConnection sqlConn = getConnection())
{
    // create command and add parameters

    // open the connection
    sqlConn.Open();

   // run the command
}

そのサンプルは、データアクセスクラスにのみ存在できます。別の方法は、それをマークしてinternal、データレイヤーをアセンブリ全体に広げることです。主なことは、データベースコードの明確な分離が厳密に実施されていることです。

実際の実装は次のようになります。

public IEnumerable<IDataRecord> GetSomeData(string filter)
{
    string sql = "SELECT * FROM [SomeTable] WHERE [SomeColumn] LIKE @Filter + '%'";

    using (SqlConnection cn = getConnection())
    using (SqlCommand cmd = new SqlCommand(sql, cn))
    {
        cmd.Parameters.Add("@Filter", SqlDbType.NVarChar, 255).Value = filter;
        cn.Open();

        using (IDataReader rdr = cmd.ExecuteReader())
        {
            while (rdr.Read())
            {
                yield return (IDataRecord)rdr;
            }
        }
    }
}

cnオブジェクトとオブジェクトの作成を「スタック」することもできたcmdため、ネストを減らし、スコープブロックを1つだけ作成できたことに注意してください。

yield return最後に、この特定のサンプルのコードの使用に関する注意事項。DataBindingメソッドを呼び出して、自分やその他の使用をすぐに完了しないと、接続が長時間開いたままになる可能性があります。この例はLoad、ASP.NETページのイベントでデータソースを設定するためにそれを使用することです。実際のデータバインディングイベントは後で発生するまで発生しないため、必要以上に長く接続を開いたままにしておくことができます。

于 2009-05-26T17:27:43.760 に答える
2

MicrosoftのPatternsandPracticesライブラリは、データベース接続を処理するための優れたアプローチです。ライブラリは、接続を開くことに関連するメカニズムのほとんどをカプセル化します。これにより、作業が楽になります。

于 2009-05-26T18:06:38.890 に答える
1

使用法についてのあなたの理解は正しいです、そしてその使用法はそうするための推奨される方法です。コードでcloseを呼び出すこともできます。

于 2009-05-26T17:20:26.393 に答える
0

また:遅く開いて、早く閉じてください。

データベースを呼び出す前に手順がなくなるまで、接続を開かないでください。完了したらすぐに接続を閉じます。

于 2009-05-26T18:08:09.637 に答える