C# 执行ExecuteStoreQuery时将通配符作为sqlparameter.Value传递
我正在使用一个数据库模型,并尝试使用C# 执行ExecuteStoreQuery时将通配符作为sqlparameter.Value传递,c#,sql-server,asp.net-mvc,C#,Sql Server,Asp.net Mvc,我正在使用一个数据库模型,并尝试使用.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 = fi
.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_字符串中用“%”替换@pr3,它实际上给出了我需要的结果
那么,如何使用SqlParameter让它工作呢
希望我说的很清楚。我在访问数据库时遇到了一个类似的问题-解决方案是在c代码中用*替换%。
但我不知道它为什么会起作用:-/您可以在存储过程中完成它
SELECT *
FROM t
WHERE f1 LIKE @pr1 + '%'
AND f2 LIKE '%' + @pr2 + '%' --if you want to search this way
AND f3 LIKE @pr3 + '%'
这里的问题是睡眠不足 它实际上按预期工作。 在询问某某之前,我花了将近2个小时在谷歌上搜索,现在我的眼睛终于睁开了
new SqlParameter {
ParameterName = "pr3",
Value = filterVal3 == 0 ? filterVal3.ToString() : "%"
});
这里的陈述是错误的。当我调试时,我期望值filterVal3
为0,在这种情况下,我的想法是在执行查询时“忽略”f3字段,但我不小心切换了true:false,这会导致错误的结果
正确的一点是:
new SqlParameter {
ParameterName = "pr3",
Value = filterVal3 != 0 ? filterVal3.ToString() : "%"
});
抱歉浪费你们的时间:(