C# 在.Net中使用类似术语的SQL参数
我有一个非常复杂的查询,并且正在修复我的相似项(我将其作为一个单独的db表,并将它们加载到搜索查询中),但是当我参数化它时,我的查询会给出不同的结果 因此,旧查询有一个类似的部分,如下所示:C# 在.Net中使用类似术语的SQL参数,c#,.net,sql,sqlparameter,C#,.net,Sql,Sqlparameter,我有一个非常复杂的查询,并且正在修复我的相似项(我将其作为一个单独的db表,并将它们加载到搜索查询中),但是当我参数化它时,我的查询会给出不同的结果 因此,旧查询有一个类似的部分,如下所示: ((v.title = ''BA'') OR (vs.label = ''BA'') OR (v.title LIKE ''BA %'') OR (vs.label LIKE ''BA %'')) ... 我将其替换为如下内容(带有参数): 我的参数添加如下: string key = "ba"; s
((v.title = ''BA'') OR (vs.label = ''BA'') OR
(v.title LIKE ''BA %'') OR (vs.label LIKE ''BA %''))
...
我将其替换为如下内容(带有参数):
我的参数添加如下:
string key = "ba";
string val = "ba";
parameters.Add("@" + key + "none", val);
parameters.Add("@" + key + "right", val + " %");
这两个问题相等吗?我遗漏了什么吗?前两个或多个案例没有存在的理由。如果只使用类似的案例,您将捕获相同的记录。例如:
(
(v.title = @banone) OR (vs.label = @banone) OR
(v.title LIKE @banone + ' %') OR (vs.label LIKE @banone + ' %')
)
...
@banone=N'BA'
...
(v.title如@banone+'%')或(v.label如@banone+'%'))
在哪里@banone='BA'
我认为你的参数添加代码是不对的 此
参数。添加(“@”+key+“right”,val+“%”)代码>
应该是parameters.AddWithValue(“@”+键+“右”,val+“%”)代码>
有两件事需要注意。首先,我删除了百分号之前的空格。其次,我使用AddWithValue而不是普通的Add
现在的问题是这个空间是否重要。回顾您的原始查询,搜索title='BA'或类似于'BA%'的title实际上会忽略title值为BAT的内容,例如,会拾取类似于BA的标题
您可能希望发布正在处理的数据和收到的结果。您是否测试了它们是否相等?您是否真的在查询后设置了变量,或者这就是您发布数据的方式?该片段来自sql profiler以及db如何看待它,但在理论上,上述参数不应该相等吗?第二个参数不应该是@baright=N''BA%'
,这样就可以正常工作了吗?
(
(v.title = @banone) OR (vs.label = @banone) OR
(v.title LIKE @banone + ' %') OR (vs.label LIKE @banone + ' %')
)
...
@banone=N'BA'
...