0

私はC#が初めてです。

私は現在、3 つの DropDownLists と送信ボタンを使用して、C# で asp.net の検索機能に取り組んでいます。たとえば、自動車のウェブサイトだとしましょう。

2 つの DropDownLists があります。

  1. メーカー (例 - トヨタ、日産、ホンダ . . .)
  2. モデル (例 - プリウス、エクストレイル、インサイトなど)

ユーザーが最初の 1 つだけを選択して (たとえば、'Toyota' を選択し、他を選択しない)、[送信] をクリックすると、データベースからすべてのトヨタ車が表示されます。ユーザーが「メーカー」と「モデル」の両方を選択すると、検索が絞り込まれます。

ユーザーがすべてのドロップダウンリストを選択しない場合、sql queryそのためにどのように記述すればよいですか? ユーザーがすべてを選択した場合はどうなりますか?

また、ドロップダウン リストの項目はデータベースから直接追加されます。また、ドロップダウンリストの上部にデフォルト値のテキストを設定する方法もわかりません。

con.Open(); 
 if (!IsPostBack) 
 { 
     cmd = new SqlCommand("SELECT DISTINCT CarMake FROM Car", con); 
     dr = cmd.ExecuteReader(); 
     while (dr.Read()) 
     { 
        DropDownList1.Items.Add(dr[0].ToString());
     } 
 }
4

3 に答える 3

3

特に、このようなパブリック Web フォームから SQL を構築する場合は、文字列連結ではなく、パラメーターを使用してクエリを構築する必要があります (MUST と言えます) 。それ以外の場合は、SQL インジェクション攻撃が発生するのを待っています。

複数のフィルターの可能性を処理する簡単な方法の 1 つLikeは、基本 SQL コマンドで演算子を使用することです。メーカーまたはモデルのいずれかが選択されていない場合は、メーカーまたはモデル名の代わりにワイルド カードを含めます。

var baseQuery = "SELECT * FROM Car " 
                "WHERE MAKE LIKE @MakeFilter AND MODEL LIKE @ModelFilter";
var cmd = new SqlCommand(baseQuery, con);
cmd.Parameters.Add(new SqlParameter( 
    "@MakeFilter", (string)ddlMake.SelectedValue ?? "%"));
cmd.Parameters.Add(new SqlParameter( 
    "@ModelFilter", (string)ddlModel.SelectedValue ?? "%"));
于 2012-10-18T16:51:33.480 に答える
0

次のように、一般的な SQL クエリを文字列に割り当てることができます。

string query = "SELECT * FROM cars";

ドロップダウンからのユーザーの選択に基づいて、SQL クエリに条件を追加します。

if (ddlMake.SelectedIndex != 0)
{
   query = query+" WHERE make='"+ddlMake.SelectedValue+"'"+;
}
if (ddlModel.SelectedIndex != 0)
{
   if(query.Contains("WHERE"))
      query = query + " AND model='"+ddlModel.SelectedValue+"'";
   else
      query = query + " WHERE model='"+ddlModel.SelectedValue+"'";
}

お役に立てれば。

于 2012-10-18T16:34:30.240 に答える
0

基本的な式ビルダーが必要です。選択したオプションに基づいて、条件のリストを作成します。次に、それらをすべて結合し、WHERE 句で配置します。

注: ユーザー入力 (特に公開 Web ページ) から SQL を生成する場合は注意が必要です。これにより、SQL インジェクションの危険にさらされます。 パラメータ化された SQL を検索し、パラメータを使用して SQL コマンドを作成することをお勧めします。

var parts = new List<string>();

if( criteria.Make.HasValue )
{
   parts.Add( string.Format( "make = '{0}'", criteria.Make.Value ) );
}

if( criteria.Model.HasValue )
{
   parts.Add( string.Format( "model = '{0}'", criteria.Model.Value ) );
}

query += string.Join( " AND ", parts );
于 2012-10-18T16:43:28.037 に答える