0

我是 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());
     } 
 }
4

3 回答 3

3

尤其是从这样的公共网络表单构建 SQL 时,您应该(我会说必须)使用参数而不是字符串连接来构建查询。否则就是等待发生的 SQL 注入攻击。

处理多种过滤器可能性的一种简单方法是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 查询分配给这样的字符串:

字符串查询=“选择*从汽车”;

根据用户从下拉列表中的选择,为您的 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 子句放在一起。

注意:从用户输入(尤其是从公共网页)生成 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 回答