【问题标题】:Setting value of parameter containing " ' " (apostrophe) used in LIKE queryLIKE 查询中使用的包含“'”(撇号)的参数的设置值
【发布时间】: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


【解决方案1】:

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

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

select * from MyTable where MyTable.name LIKE @search

代码应该是这样的:

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

请注意,search原始 值,没有转义。

【讨论】:

  • 我认为你的代码是正确的,但 SQL 应该是 LIKE '%' + @search + '%'
  • 就是这样。在通过 API 插入该值之前,我转义了单引号参数值。请注意,对于查询,我不需要 @search 参数周围的 %,因为它们已包含在对 AddWithValue 的调用中。非常感谢您的回复。现在效果很好。
【解决方案2】:

在 SQL 方面,这是正确的:

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

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

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

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

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

【讨论】:

    【解决方案3】:

    在 t-sql 中,您使用两个转义 ':''

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 2021-12-27
      相关资源
      最近更新 更多