1

私は次のものを持っています:

    SqlConnection con = new SqlConnection(strConn);
    DataSet ds = new DataSet();
    SqlDataAdapter myda = new SqlDataAdapter("SELECT [Key], [Value] FROM [data_LookupValues] where Category = 'CanadaProvinces' ", con);
    myda.Fill(ds);
    ddlState.DataSource = ds;
    ddlState.DataTextField = "Value";
    ddlState.DataValueField = "Key";
    ddlState.DataBind(); 

CanadaProvincesの文字列値を中に入れる必要があるため、行き詰まりましたSqlDataAdapter

これを行う簡単な方法はありますか?自分のやり方でやるとエラーが発生します。

4

2 に答える 2

1

エラーは通知されていませんが、これは有効なSQLではありません。

SELECT [Key], [Value] FROM [data_LookupValues] = 'CanadaProvinces'

data_LookupValuesデータベース内のテーブルは何を照会しますか?

おそらくこれはあなたが実際に望むものです:

SELECT [Key], [Value] FROM [data_LookupValues] WHERE Provinces = 'CanadaProvinces'

もちろん、私は正しい列名を想定しています。

于 2012-11-14T21:33:38.057 に答える
0

適切な方法は、いくつかのことを行うことです。

  1. using使い捨てのオブジェクトをブロックに包みます
  2. 別のSqlCommandオブジェクトを使用し、(SQLを連結する代わりに)パラメーター化されたクエリを使用します
  3. 返されるデータセットは1つだけなのでDataTable、はるかに「重い」データセットの代わりに使用しますDataSet
  4. データのフェッチを独自のメソッドに分離し、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、ルックアップテーブルで可能なカテゴリを取得できます。

于 2012-11-14T21:54:52.903 に答える