如何在不使用代码隐藏的情况下处理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默认值为空字符串。
答案 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; 1>}如果需要的话。