【问题标题】:two dropdown lists search两个下拉列表搜索
【发布时间】:2012-10-19 00:53:31
【问题描述】:

我是 C# 新手。

我目前正在使用 c# 使用三个 DropDownLists 和一个提交按钮在 asp.net 中使用搜索功能。假设这是一个汽车网站。

有 2 个下拉列表:

  1. 制造商(例如 - 丰田、日产、本田......)
  2. 型号(例如 - Prius、X-trail、Insight ......)

如果用户只选择第一个(例如 - 他/她选择“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());
     } 
 }

【问题讨论】:

  • 您使用的是什么数据库?任何ORM? (如 LINQ2SQL 或实体框架)
  • 请发布代码以显示您如何填充列表。
  • 你已经尝试过什么朋友?
  • 发布您当前接受makemodel 作为参数并返回数据的代码。
  • @XinLee,将代码添加到您上面的原始帖子中,并发布您的查询,在您选择下拉值后返回所有汽车数据

标签: c# asp.net html


【解决方案1】:

尤其是在像这样从公共网络表单构建 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 ?? "%"));

【讨论】:

    【解决方案2】:

    您可以将通用 SQL 查询分配给这样的字符串:

    字符串查询 = "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+"'";
    }
    

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      您本质上需要一个基本的表达式构建器。根据他们选择的选项,您将建立一个条件列表。然后,您将把它们全部连接在一起,并将它们与 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 );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-13
        • 1970-01-01
        相关资源
        最近更新 更多