0

我正在使用数据库模型并尝试使用.ExecuteStoreQuery函数查询一些数据。

我的 SQL 语句看起来像这样

SELECT * FROM t WHERE f1 LIKE @pr1 AND f2 LIKE @pr2 AND f3 LIKE @pr3

现在如您所见,我使用 3 个参数:@pr1,2,3

context.ExecuteStoreQuery(SQL_string,
new SqlParameter {
  ParameterName = "pr1",
  Value = filterVal1
},
new SqlParameter {
  ParameterName = "pr2",
  Value = filterVal2
},
new SqlParameter {
  ParameterName = "pr3",
  Value = filterVal3 == 0 ? filterVal3.ToString() : "%"
});

如您所见,根据条件,我想使用 filterVal3 的实际值或通配符 % 所以最后当执行 sql 语句时,它将根据其他 2 个参数选择记录。

问题是,“%”被翻译成我所期望的东西,并且查询返回空集。我试图用 SQL_string 中的 '%' 替换 @pr3,它实际上给了我我需要的结果。

那么如何使用 SqlParameter 让它工作呢?

希望我很清楚。

4

3 回答 3

0

您可以在存储过程中执行此操作

SELECT * 
FROM t 
WHERE f1 LIKE @pr1 + '%' 
    AND f2 LIKE '%' + @pr2 + '%' --if you want to search this way
    AND f3 LIKE @pr3 + '%'
于 2013-02-12T20:46:04.883 回答
0

这里的问题是睡眠不足。

它实际上按预期工作。在向 SO 询问之前花了将近 2 个小时的谷歌搜索,现在我的眼睛终于睁开了。

new SqlParameter {
  ParameterName = "pr3",
  Value = filterVal3 == 0 ? filterVal3.ToString() : "%"
});

这里的连续陈述是错误的。我在调试时期望值为filterVal30,在这种情况下,想法是在执行查询时“忽略” f3 字段,但我不小心切换了 true : false 并导致错误结果。

正确的一种是:

new SqlParameter {
  ParameterName = "pr3",
  Value = filterVal3 != 0 ? filterVal3.ToString() : "%"
});

对不起各位浪费你们的时间:(

于 2013-02-12T21:06:07.457 回答
0

我在 Access DB 上遇到了一个类似的问题 - 解决方案是在 c# 代码中用 * 替换 % 。我不知道为什么它会起作用:-/

于 2013-02-12T20:44:41.197 回答