如何处理ASP.NET SqlDataSource中的空CONTAINS()查询参数?

时间:2014-04-08 09:48:25

标签: c# asp.net sql full-text-search contains

如何在不使用代码隐藏的情况下处理SQL CONTAINS()条件中的空ControlParameter值(以便返回所有结果)?看起来可能是LIKE '%'WHERE (1=1)

<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默认值为空字符串。

2 个答案:

答案 0 :(得分:0)

查看mssql的IS NULL属性

答案 1 :(得分:0)

WHERE WHERE CONTAINS([Column], COALESCE(@searchText, [Column]))之类的内容 基本上我的想法是,如果@searchText为空,请使用[Column][Column]包含[Column],以便返回所有内容。

如果@searchText不是空的但只是空白,您可能会遇到问题,您可以使用CASE语句检查长度或类似内容。

对于空字符串处理,我无法获得CONTAINS的第二个参数来接受case语句,所以这应该有效: WHERE [COLUMN] = CASE WHEN LEN(RTRIM(LTRIM(COALESCE(@searchText, '')))) = 0 THEN [COLUMN] ELSE @searchText END 显然,你可以改变&#39; =&#39; }如果需要的话。