如何处理 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 Core MVC 502 bad gateway 超时如何处理
我应该如何处理 Window Phone / WCF / ASP.NET MVC 应用程序的用户身份?