我在 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/