2014-01-29 56 views
1

我有一个基于查询字符串中传递的值列出表中产品的页面。
例如: - ABC/product.aspx/SUBCAT =移动& BND =三星
这将显示所有的移动与三星品牌

我怎么能展示品牌的所有移动,不论是否BND空或没有通过即只有subcat值通过。
我需要SqlDataSource命令来做同样的事情。我目前的查询,如下图所示:如果查询字符串中的一个字段为空且字符串格式为其中的字符串格式,则返回表中的所有值

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:shoppingConnectionString2 %>" 
    SelectCommand="SELECT * FROM [ProductDetails] WHERE (([Sub_category] = @Sub_category) AND ([Brand] = @Brand OR @Brand IS NULL))" 
    onselecting="SqlDataSource1_Selecting"> 
    <SelectParameters> 
     <asp:QueryStringParameter Name="Sub_category" QueryStringField="subcat" 
      Type="String" DefaultValue="&quot; &quot;" /> 
     <asp:QueryStringParameter Name="Brand" QueryStringField="bnd" Type="String" 
      DefaultValue="IS NULL" ConvertEmptyStringToNull="True" /> 
    </SelectParameters> 
</asp:SqlDataSource> 
+1

只需检查sql命令的参数,它会更清洁。它会让你免于编写复杂的sql命令,并相应地改变你的命令 – simsim

回答

0

代码隐藏:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     string subcat = Request.QueryString["subcat"]; 
     string bnd = Request.QueryString["bnd"]; 

     string query = "SELECT * FROM [ProductDetails] WHERE ([Sub_category] = " + subcat + ")"; 
     if (!String.IsNullOrEmpty(bnd)) 
     { 
      query += " AND ([Brand] = " + bnd + ")"; 
     }     

     SqlDataSource1.SelectCommand = query;     
    } 
} 

HTML标记:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:shoppingConnectionString2 %>" 
    SelectCommand="SELECT * FROM [ProductDetails]" 
    onselecting="SqlDataSource1_Selecting"> 
</asp:SqlDataSource> 

(注意去掉SelectParameters)

我从来之前使用了一个SqlDataSource,但这与我为ObjectDataSource所做的相似。上面的代码适用于你的场景吗?

编辑:请注意,这种方法是开放的SQL注入攻击,所以你应该首先验证/清理查询字符串参数。

+0

哇,真的非常感谢这一点,我也不知道我可以用代码隐藏来处理这个问题。真的非常感谢这一点。他们只是有点改变,因为我的价值观是字符串,所以它会是''+ subcat +''。 – ALOK

相关问题