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

C# 如何处理ASP.NET SqlDataSource中的空CONTAINS()查询参数?,c#,asp.net,sql,full-text-search,contains,C#,Asp.net,Sql,Full Text Search,Contains,我们如何处理SQLCONTAINS()条件中的空ControlParameter值而不使用代码隐藏(以便它返回所有结果)?可能正在查找类似“%”的或WHERE(1=1) 我知道一种方法是在代码隐藏中创建一个动态查询,但也许还有另一种方法可以通过标记来实现 编辑:ControlParameter默认值为空字符串。查看mssql的is NULL属性使WHERE类似于WHERE CONTAINS([Column],COALESCE(@searchText,[Column]) 基本上,这个想法是,如

我们如何处理SQL
CONTAINS()
条件中的空ControlParameter值而不使用代码隐藏(以便它返回所有结果)?可能正在查找类似“%”的
WHERE(1=1)


我知道一种方法是在代码隐藏中创建一个动态查询,但也许还有另一种方法可以通过标记来实现


编辑:ControlParameter默认值为空字符串。

查看mssql的is NULL属性

使
WHERE
类似于
WHERE CONTAINS([Column],COALESCE(@searchText,[Column])
基本上,这个想法是,如果
@searchText
为空,则使用
[Column]
,并且
[Column]
包含
[Column]
,因此应该返回所有内容

如果
@searchText
不是null而是空的,则可能会出现问题,您需要使用
CASE
语句检查长度或类似内容

对于空字符串处理,我无法获取CONTAINS的第二个参数以接受case语句,因此这应该可以工作:
其中[COLUMN]=LEN(RTRIM(LTRIM(COALESCE(@searchText,))))=0时的情况,然后[COLUMN]ELSE@searchText END

显然,如果需要的话,您可以将“=”更改为
,如

实际上,我需要空字符串处理,因为这是空文本框的值。添加了空字符串编辑…可能不是最有效的。主要问题是我需要全文包含()搜索。否则它将是一个简单的
WHERE列,如“%”
<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>