0

ドロップダウンリストに入力する次のコードがあります。

string strConn = ConfigurationManager.ConnectionStrings["PhoQL"].ConnectionString;
using (SqlConnection con = new SqlConnection(strConn))
{
  DataSet ds = new DataSet();
  using (SqlDataAdapter myda = new SqlDataAdapter("SELECT [Abrv], [State] FROM [States]", con))
  {
    myda.Fill(ds)
    ddlShipState.DataSource = ds;
  }
}
ddlShipState.DataTextField = "State";
ddlShipState.DataValueField = "Abrv";
ddlShipState.DataBind();

もっと効率的な方法があるのではないかと思っていました。接続を開いたり閉じたりする必要がないことに注意してください。それが私の例で違いを生むかどうか疑問に思います。より効率的な観点から、私は上記のもののベストコードプラクティスを探しています。

4

2 に答える 2

0

接続を開いたり閉じたりする必要がないことに注意してください。

いいえ、しかしDataAdapterそれは暗黙のうちに行われます。

MSDN :

Fill が呼び出される前に IDbConnection が閉じられた場合は、IDbConnection が開かれてデータが取得されてから閉じられます。Fill が呼び出される前に接続が開いている場合は、開いたままになります。

Connection-Poolingただし、 (デフォルト)を使用している場合は、開閉が非効率ではないことに注意してください。then はcon.Open単に「待ってください。今すぐこの接続が必要です」con.Closeという意味であり、「わかりました。今すぐ別の場所で再利用できます。完了しました」という意味です。

そのため、接続が終了したらすぐに接続を閉じる必要があります。そうしないと、接続プールは毎回新しい物理接続を開く必要があり、例外が発生する可能性があります (最大デフォルト接続数は 100) が、常にパフォーマンスが低下します。

IDisposable接続 (任意)を破棄/閉じる最良の方法は、次のusingステートメントを使用することです。

using(var con = new SqlConnection(ConfigurationManager.ConnectionStrings["PhoQL"].ConnectionString))
using(var cmd = new SqlCommand("SELECT [Abrv], [State] FROM [States]", con))
using(var da = new SqlDataAdapter(cmd))
{
    DataTable tbl = new DataTable();
    da.Fill(tbl);
    ddlShipState.DataSource = tbl;
    ddlShipState.DataTextField = "State";
    ddlShipState.DataValueField = "Abrv";
    ddlShipState.DataBind();
} 

(補足:私はあなたDataSetを「ライター」に置き換えましたDataTable

于 2012-11-16T15:06:12.680 に答える
0

これを何度も行う場合は、データのキャッシュを検討する必要があります。

http://msdn.microsoft.com/en-us/library/aa478965.aspx

そうすれば、10,000 人のユーザーがいる場合でも、データベースに 1 回だけヒットします。

于 2012-11-16T15:06:45.843 に答える