如何处理 ASP.NET SqlDataSource 中的空 CONTAINS() 查询参数
本文关键字:查询 参数 CONTAINS NET 何处理 处理 ASP SqlDataSource | 更新日期: 2023-09-27 17:57:13
如何在不使用代码隐藏的情况下处理 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>
我知道一种方法是在代码隐藏中创建动态查询,但也许还有其他方法可以只使用标记来做到这一点。
编辑:控件参数默认值为空字符串。
看看mssql的IS NULL属性
使WHERE
类似于WHERE CONTAINS([Column], COALESCE(@searchText, [Column]))
基本上这个想法是,如果@searchText
为 null,则使用 [Column]
,并且 [Column]
包含 [Column]
因此应返回所有内容。
如果 @searchText
不是 null 而只是空白,您可能会遇到问题,您必须使用 CASE
语句来检查长度或类似内容。
对于空字符串处理,我无法让 CONTAINS 的第二个参数接受 case 语句,所以这应该有效: WHERE [COLUMN] = CASE WHEN LEN(RTRIM(LTRIM(COALESCE(@searchText, '')))) = 0 THEN [COLUMN] ELSE @searchText END
显然,如果需要,您可以将"="更改为LIKE
。