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

本文关键字:SQL 参数 术语 相似 net | 更新日期: 2023-09-27 17:50:33

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

旧的查询有一个类似的部分,像这样:

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

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

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

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

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

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

@banone ="BA"


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

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

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

有两件事需要注意。首先,我去掉百分号前面的空格。其次,我使用AddWithValue而不是普通的Add。

你的问题是,这个空间是否重要。回顾您的原始查询,搜索title = 'BA' or title LIKE 'BA %'实际上会忽略标题具有BAT值的东西,例如,但会拾取标题如BA Something

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