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

Posted

技术标签:

【中文标题】如何处理 ASP.NET SqlDataSource 中的空 CONTAINS() 查询参数?【英文标题】:How to handle empty CONTAINS() query parameter in ASP.NET SqlDataSource? 【发布时间】:2014-05-20 22:24:06 【问题描述】:

我们如何在不使用代码隐藏的情况下处理 SQL CONTAINS() 条件中的空 ControlParameter 值(以便它返回所有结果)?可能正在寻找类似 @​​987654322@ 或 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 默认值为空字符串。

【问题讨论】:

【参考方案1】:

查看 mssql 的 IS NULL 属性

【讨论】:

【参考方案2】:

使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 显然,如果需要,您可以将 '=' 更改为 LIKE

【讨论】:

好吧,我实际上需要空字符串处理,因为这是空文本框的值。 添加了对空字符串的编辑...可能不是最有效的。 主要问题是我需要全文 CONTAINS() 搜索。否则它将是一个简单的WHERE Column LIKE '%'

以上是关于如何处理 ASP.NET SqlDataSource 中的空 CONTAINS() 查询参数?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET vNext 如何处理 config.json 中的缓存、压缩和 MimeMap?

如何处理 ASP.NET MVC 3 中每个键的多个值?

ASP.NET Core MVC 502 bad gateway 超时如何处理

我应该如何处理 Window Phone / WCF / ASP.NET MVC 应用程序的用户身份?

ASP.NET Core Web API - 如何处理 URL 查询字符串中的“null”与“undefined”?

asp.net mvc 中模型验证如何处理数组呢?