2014-04-08 86 views
0

如何在不使用代碼隱藏的情況下處理SQL CONTAINS()條件中的空ControlParameter值(以便返回所有結果)?看起來可能類似LIKE '%'WHERE (1=1)如何在ASP.NET SqlDataSource中處理空CONTAINS()查詢參數?

<asp:TextBox ID="tbSearch" runat="server" placeholder="Search" ></asp:TextBox> 

<asp:SqlDataSource ID="SqlDataSourceA" runat="server" ConnectionString="..." 
    SelectCommand="SELECT [Columns] FROM [Table] 
       WHERE CONTAINS([Column],@searchText) ORDER BY [Time] DESC"> 
    <SelectParameters> 
     <asp:ControlParameter Name="searchText" ControlID="tbSearch" 
          PropertyName="Text" DefaultValue="?" /> 
    </SelectParameters>   
</asp:SqlDataSource> 

我知道,一個辦法是落後在代碼中創建一個動態查詢,但也許還有其他辦法做到這一點只標記。

編輯:ControlParameter默認值爲空字符串。

回答

0

的NULL屬性充分利用WHEREWHERE CONTAINS([Column], COALESCE(@searchText, [Column])) 基本上想法是,如果@searchText爲空,使用[Column][Column]包含[Column]所以一切都應該歸還。

如果@searchText不爲空而只是空白,那麼可能會有問題,您將使用CASE語句來檢查長度或類似內容。

空字符串處理,我不能讓第二個PARAM包含受理的案件陳述,所以這應該工作: WHERE [COLUMN] = CASE WHEN LEN(RTRIM(LTRIM(COALESCE(@searchText, '')))) = 0 THEN [COLUMN] ELSE @searchText END 顯然,如果需要,您可以再更改「=」來LIKE

+0

嗯,我實際上需要空字符串處理,因爲這是空的文本框的值。 – yosh

+0

添加了空字符串的編輯...可能不是最有效的。 – cjb110

+0

主要問題是我需要全文CONTAINS()搜索。否則它將是一個簡單的'WHERE Column LIKE'%''。 – yosh