如果查询字符串中的一个字段为空且其格式为String,则返回表中的所有值

时间:2014-01-29 05:36:23

标签: c# asp.net query-string sqldatasource

我有一个页面,根据查询字符串中传递的值列出表中的产品 例如: - abc / product.aspx / subcat = Mobile& bnd = Samsung
在这里它将显示所有移动品牌三星

如果 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 个答案:

答案 0 :(得分: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注入攻击是开放的,因此您应该首先验证/清理查询字符串参数。