两个下拉列表搜索

时间:2012-10-18 16:21:39

标签: c# asp.net html

我是c#的新手。

我正在使用c#使用三个DropDownLists和一个提交按钮在asp.net中使用搜索功能。比方说,这是一个汽车网站。

有2个DropDownLists:

  1. 制造(例如 - 丰田,日产,本田......)
  2. 模型(例如 - Prius,X-trail,Insight ..)
  3. 如果用户只选择第一个(例如 - 他/她选择'丰田'而不选择其他)并单击提交,它将显示数据库中的所有丰田汽车。如果用户同时选择“制作”和“模型”,则会缩小搜索范围。

    如果用户没有选择所有下拉列表,我应该如何为此编写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());
         } 
     }
    

3 个答案:

答案 0 :(得分:3)

特别是当从这样的公共webform构建SQL时,您应该(我会说必须)使用参数构建查询,不是字符串连接。否则它是等待发生的SQL注入攻击。

处理多种过滤器可能性的一种简单方法是在基本SQL命令中使用Like运算符。如果未选择品牌或型号,只需包含外卡而不是品牌或型号名称:

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 ?? "%"));

答案 1 :(得分: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+"'";
}

希望这有帮助。

答案 2 :(得分:0)

您基本上需要一个基本的表达式构建器。根据他们选择的选项,您将建立一个条件列表。然后你将它们加在一起,并将它们与WHERE子句放在一起。

注意:从用户输入(尤其是公共网页)生成SQL时需要小心。这会让您面临SQL注入的风险。 I recommend looking up parameterized SQL and building SQL commands using parameters.

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 );