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

Rob*_*gal 2 c# sql-server asp.net

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

select * from MyTable where MyTable.name LIKE @search
Run Code Online (Sandbox Code Playgroud)

我尝试了以下查询替代方法在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%'
Run Code Online (Sandbox Code Playgroud)

通过api ......

myCmd.Parameters.AddWithValue("@search", search);
myCmd.Parameters.AddWithValue("@search", "%" + search + "%");
myCmd.Parameters.AddWithValue("@search", "%'" + search + "'%");
Run Code Online (Sandbox Code Playgroud)

这些都不起作用.

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

select * from MyTable where MyTable.name LIKE '%MyValue''ToSearchForWith''Quotes%'
Run Code Online (Sandbox Code Playgroud)

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

bdu*_*kes 6

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

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

select * from MyTable where MyTable.name LIKE @search
Run Code Online (Sandbox Code Playgroud)

代码应如下所示:

string search = "MyValue'ToSearchForWith'Quotes";
myCmd.Parameters.AddWithValue("@search", "%" + search + "%");
Run Code Online (Sandbox Code Playgroud)

请注意,这search原始值,未转义.