Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 参数的设置值,包含'&引用;(撇号)用于类似的疑问句_C#_Asp.net_Sql Server - Fatal编程技术网

C# 参数的设置值,包含'&引用;(撇号)用于类似的疑问句

C# 参数的设置值,包含'&引用;(撇号)用于类似的疑问句,c#,asp.net,sql-server,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 * fro

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

在t-sql中,您可以使用两个参数进行“转义”:


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

我认为问题在于,当SQL参数为您这样做时,您正在对
search
参数中的引号进行转义

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

select * from MyTable where MyTable.name LIKE @search
string search = "MyValue'ToSearchForWith'Quotes";
myCmd.Parameters.AddWithValue("@search", "%" + search + "%");
代码应该是这样的:

select * from MyTable where MyTable.name LIKE @search
string search = "MyValue'ToSearchForWith'Quotes";
myCmd.Parameters.AddWithValue("@search", "%" + search + "%");

请注意,
search
是原始值,而不是转义值。

在SQL端,这是正确的:

select * from MyTable where MyTable.name LIKE '%' + @search + '%'
如果参数是从外部传入的,那么它是否包含单引号就无关紧要了

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

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

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

我认为您的代码是正确的,但SQL应该像“%”+@search++“%”正是这样。在通过API插入单引号参数值之前,我对该值进行了转义。请注意,对于查询,我不需要@search参数周围的%,因为它们包含在AddWithValue调用中。非常感谢你的回复。现在效果很好。@Rob Segal:你能解释一下“这些都没有效果”吗?看起来中间的那些也很好。是否真的没有符合您的测试标准的记录?或者它是否抛出某种错误?搜索变量中的值是多少?您是否将“char”预先定界为“”?