c# - LIKE 查询中使用的包含 "' "(撇号)的参数的设置值

标签 c# asp.net sql-server

我在 ASP.NET/C# 代码中有以下查询,它无法使用参数返回任何值...

select * from MyTable where MyTable.name LIKE @search

我尝试了以下查询替代方案来在 SQL 命令中设置此参数...

select * from MyTable where MyTable.name LIKE  %@search%
select * from MyTable where MyTable.name LIKE '%' + @search + '%'
select * from MyTable where MyTable.name LIKE '%@search%'

并通过 api...

myCmd.Parameters.AddWithValue("@search", search);
myCmd.Parameters.AddWithValue("@search", "%" + search + "%");
myCmd.Parameters.AddWithValue("@search", "%'" + search + "'%");

这些都不起作用。

我使用的搜索参数在其文本中有单引号,我认为这让事情变得更加尴尬。我相信我正确地转义了参数,因为如果我构造一个直接使用该值的查询,而不是像这样通过参数...

select * from MyTable where MyTable.name LIKE '%MyValue''ToSearchForWith''Quotes%'

行得通。据我所见,要在查询中使用单引号,您需要做的就是将它们加倍。我没有看到任何错误,所以我假设我是正确的。最坏的情况我有一个解决方案,但我想通过 api 设置搜索值,因为我相信这是更好的做法。

最佳答案

我认为问题是您在 search 参数中转义了引号,而 SQL 参数为您完成了转义。

百分号应该在 SQL 参数值内部;您的查询只是简单地引用了参数。 SQL 应如下所示:

select * from MyTable where MyTable.name LIKE @search

代码应该是这样的:

string search = "MyValue'ToSearchForWith'Quotes";
myCmd.Parameters.AddWithValue("@search", "%" + search + "%");

请注意,search原始 值,未转义。

关于c# - LIKE 查询中使用的包含 "' "(撇号)的参数的设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/859080/

相关文章:

c# - 将 LiveCharts 饼图 PieSeries 值绑定(bind)到后面代码中的属性

c# - 无法读取配置部分 'assemblies',因为它缺少部分声明

c# - 如何防止用户进行未经授权的 web 方法调用和篡改客户端验证

sql - NEWSEQUENTIALID 的可预测性如何?

c# - 如何捕获线程中发生的 Asp.net 核心中的异常

c# - 显示格式 ApplyFormatInEditMode

javascript - 如何知道是否在另一个页面上单击了按钮?

c# - 如何最好地检查 cookie 是否存在?

sql-server - 在 Sql Server 2005 中实现最后修改列的最佳方法?

sql-server - SQL Server GROUP BY、SUM 和检索列值