-2

実際、私のデータベース接続は次のようになっています...では、接続プールを紹介します。このための書き方を教えてもらえますか...、

public static string dbpath()
    {
        try
        {
            string strcon = @"Data Source=local\SQLEXPRESS;Initial Catalog=aniv;Integrated Security=True";
           SqlConnection con = new SqlConnection(strcon);
            if (con.State == ConnectionState.Open)
            {
                con.Close();
            }
            con.Open();
            return strcon;
        }
        catch (SqlException ex)
        {
            MessageBox.Show(ex.Message);
            return "0";
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            return "0";
        }

    }
4

2 に答える 2

1

接続プーリングメカニズムを利用するために特別なことをする必要はありません。
ただし、コードを少し変更する必要があります。

まず、開いている接続のチェックをコードから削除できます

SqlConnection con  = new SqlConnection(strcon);
// Has been created here, it is always closed
//if (con.State == ConnectionState.Open)
//{
//    con.Close();
//}

次に、接続文字列ではなく、接続オブジェクトを返します。(try/catch ブロックも削除したことに注意してください。例外的なケースは、これよりも上位レベルの手順で処理する方がよいと思います)

public static SqlConnection dbconnection()
{
   string strcon = @"Data Source=local\SQLEXPRESS;Initial Catalog=aniv;Integrated Security=True";
   SqlConnection con = new SqlConnection(strcon);
   con.Open();
   return con;

}

これにより、例外が発生した場合でも、接続オブジェクトを適切に閉じて破棄することを保証するusing ステートメントを使用して、接続の作成と開始を記述することができます。
したがって、顧客の DataTable をロードする必要があると仮定すると、次のように記述できます。

using(SqlConnection cn = dbconnection())
{
    string sqlText = "SELECT * FROM Customers ORDER BY CustomerName";
    SqlCommand cmd = new SqlCommand(sqlText, con);
    DataTable dtCustomers = new DataTable();
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    da.Fill(dtCustomers);
    // Do what you want with the datatable (bind to a grid, return to do more processing...
}

これにより、プール内の接続数が制限内に維持され、プログラムは接続プールに関して正しく動作します。

于 2013-03-19T10:28:49.810 に答える
0

詳細リファレンス: ADO.NET 接続プーリング

すべての接続プールは個別の接続文字列に関連付けられており、それもアプリケーションに固有です。

接続が最初に開かれると、プールを接続内の接続文字列に関連付ける正確な一致アルゴリズムに基づいて接続プールが作成されます。

プーリング関連のキーワードを使用した接続文字列の例:

initial catalog=Northwind; Data Source=localhost; Connection Timeout=30; 
User Id=MYUSER; Password=PASSWORD; Min Pool Size=20; Max Pool Size=200; 
Incr Pool Size=10; Decr Pool Size=5;

このように、新しい接続は、最大プール サイズに達するまでプールに追加され続けます。その後、ADO.NET がさらなる接続の要求を受け取ると、接続タイムアウト時間待機してからエラーになります。

接続が目的を果たしたら、接続を閉じるか破棄することを強くお勧めします。

同じ構成の接続のみをプールできます。

フェイルオーバーなどの致命的なエラーが発生すると、プールは自動的にクリアされます。

接続文字列は、接続プーリングで重要な役割を果たします。

于 2013-03-19T10:28:59.890 に答える