我正在使用数据库模型并尝试使用.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来实现它呢?
希望我很清楚。答案 0 :(得分:0)
我和Access DB有类似的问题 - 解决方案是用c#代码中的*替换%。 我不知道为什么会这样: - /
答案 1 :(得分:0)
您可以在存储过程中执行此操作
SELECT *
FROM t
WHERE f1 LIKE @pr1 + '%'
AND f2 LIKE '%' + @pr2 + '%' --if you want to search this way
AND f3 LIKE @pr3 + '%'
答案 2 :(得分:0)
这里的问题是缺乏睡眠。
它实际上是按预期工作的。
。在搜索SO之前花了将近2个小时的谷歌搜索,现在我的眼睛已经开始了。new SqlParameter {
ParameterName = "pr3",
Value = filterVal3 == 0 ? filterVal3.ToString() : "%"
});
这里的连续陈述是错误的。当我正在调试时,我期望filterVal3
的值为0,在这种情况下,想法是在执行查询时“忽略”f3字段,但我意外地切换了true:false并导致错误的结果
正确的是:
new SqlParameter {
ParameterName = "pr3",
Value = filterVal3 != 0 ? filterVal3.ToString() : "%"
});
对不起那些浪费你时间的人:(