如何处理 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>

我知道一种方法是在代码隐藏中创建动态查询,但也许还有其他方法可以只使用标记来做到这一点。

编辑:控件参数默认值为空字符串。

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

看看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