2

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

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

((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 + " %");

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

4

2 回答 2

2
(
  (v.title = @banone) OR (vs.label = @banone) OR 
  (v.title LIKE @banone + ' %') OR (vs.label LIKE @banone + ' %')
)
...
@banone=N'BA'
...
于 2013-01-03T01:25:27.977 回答
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 %'实际上会忽略 title 具有BAT值的内容,例如,但会拾取BA Something之类的标题

您可能想要发布您正在使用的数据和您收到的结果。

于 2013-01-03T01:32:02.980 回答