2014-01-29 97 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

相關問題