.Net中具有相似术语的SQL参数

时间:2013-01-03 00:58:37

标签: c# .net sql sqlparameters

我有一个非常复杂的查询,正在修复我喜欢的术语(我作为一个单独的数据库表并将它们加载到我的搜索查询中),但是当我参数化它时,我的查询给出了不同的结果。

所以旧的查询有类似的部分:

((v.title = ''BA'') OR (vs.label = ''BA'') OR 
(v.title LIKE ''BA %'') OR (vs.label LIKE ''BA %''))
...

我用这样的东西替换它(带参数):

((v.title = @banone) OR (vs.label = @banone) OR 
(v.title LIKE @baright) OR (vs.label LIKE @baright))
...
@banone=N'BA',@baright=N'BA %',
...

我的参数添加如下:

string key = "ba"; 
string val = "ba";

parameters.Add("@" + key + "none", val);
parameters.Add("@" + key + "right",  val + " %");

这两个查询是否相同?我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

(
  (v.title = @banone) OR (vs.label = @banone) OR 
  (v.title LIKE @banone + ' %') OR (vs.label LIKE @banone + ' %')
)
...
@banone=N'BA'
...

答案 1 :(得分:1)

前两个或案例没有理由存在。如果您只使用LIKE情况,您将捕获相同的记录。例如:

(v.title LIKE @banone + ' %') OR (vs.label LIKE @banone + ' %')

其中@ banone ='BA'


我认为你的参数添加代码不对。

parameters.Add("@" + key + "right", val + " %");

应为parameters.AddWithValue("@" + key +"right", val + "%");

有两点需要注意。首先,我在百分号前删除了空格。其次,我使用AddWithValue而不是普通的Add。

然后回到你的问题是这个空间是否重要。回顾一下您的原始查询,搜索title = 'BA' or title LIKE 'BA %'实际上会忽略标题的值为 BAT 的内容,但会提取一个标题,例如 BA Something < / p>

您可能希望发布您正在使用的数据以及您收到的结果。