【发布时间】:2009-05-13 16:49:13
【问题描述】:
我在 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 设置搜索值,因为我相信这是更好的做法。
【问题讨论】:
-
@Rob Segal:你能解释一下“这些都不起作用”吗?看起来中间的那些,分别很好。是否真的有 is 没有符合您的测试标准的记录?还是会引发某种错误?
-
搜索变量中的值是多少?您是否将 ' char 预先分隔为 ''?
标签: c# asp.net sql-server