適切な方法は、いくつかのことを行うことです。
using
使い捨てのオブジェクトをブロックに包みます
- 別の
SqlCommand
オブジェクトを使用し、(SQLを連結する代わりに)パラメーター化されたクエリを使用します
- 返されるデータセットは1つだけなので
DataTable
、はるかに「重い」データセットの代わりに使用しますDataSet
- データのフェッチを独自のメソッドに分離し、Webページからを呼び出すだけで、データを普遍的に使用できるようになります。(他のことでも機能します-だけでなく
CanadaProvinces
)
したがって、コードは次のようになります。
private DataTable FetchData(string categoryValue)
{
string query = "SELECT [Key], [Value] FROM [data_LookupValues] where Category = @Category";
using (SqlConnection con = new SqlConnection(strConn))
using (SqlCommand cmd = new SqlCommand(query, con))
{
cmd.Parameters.Add("@Category", SqlDbType.VarChar, 50).Value = categoryValue;
SqlDataAdapter myda = new SqlDataAdapter(cmd);
DataTable result = new DataTable();
myda.Fill(result);
return result;
}
}
次に、ASPX Webの分離コードで、次のようなものを使用します。
DataTable tblCanadaProvinces = FetchData('CanadaProvinces');
ddlState.DataSource = tblCanadaProvinces;
ddlState.DataTextField = "Value";
ddlState.DataValueField = "Key";
ddlState.DataBind();
そしてそれで終わります。これで、メソッドを呼び出してFetchData
、ルックアップテーブルで可能なカテゴリを取得できます。