设置LIKE查询中使用的包含“'”(撇号)的参数值

时间:2009-05-13 16:49:14

标签: 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设置搜索值,因为我认为这是更好的做法。

3 个答案:

答案 0 :(得分:6)

我认为问题在于,当SQL参数为您执行此操作时,您正在转义search参数中的引号。

百分号应该在里面 SQL参数值;您的查询只是明确地引用参数。 SQL应如下所示:

select * from MyTable where MyTable.name LIKE @search

代码看起来像这样:

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

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

答案 1 :(得分:3)

在SQL方面,这是正确的:

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

如果参数是从外部传入的,那么它是否包含单引号无关紧要。

在API方面,这应该是正确的:

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

AddWithValue()方法为您完成所有必要的转义,无需干涉。

答案 2 :(得分:0)

在t-sql中你通过使用两个来逃避''''

@ query ='这不会导致问题'