我遇到了麻烦,尝试使用实体框架重复执行带有参数的SQL查询。实体框架SqlQuery使用重复参数执行查询
该查询是关键字搜索,它在不同的表中查找,因此多次使用相同的参数。我使用LIKE语句(是的,我知道我应该使用FULLTEXTSEARCH,但现在我没有时间)。
我试过所有在这里解释的语法:How to use DbContext.Database.SqlQuery<TElement>(sql, params) with stored procedure? EF Code First CTP5并且它们都不使查询工作(我得到零返回的行)。
我甚至尝试在运行时建立一个字符串数组,其长度等于参数在查询中重复的次数,然后用关键字搜索词填充数组的所有元素。然后我通过那个对象[]参数。也没有工作。
唯一可行的是做一个搜索&取代,这显然是一个坏主意,因为参数来自一个文本输入,我会很容易受到SQL注入攻击。
工作代码(容易受到SQL注入式攻击,但查询返回行):
//not the real query, but just for you to have an idea
string query =
"SELECT Field1, " +
" Field2 " +
"FROM Table1 " +
"WHERE UPPER(Field1) LIKE '%{0}%' " +
"OR UPPER(Field2) LIKE '%{0}%'";
//keywordSearchTerms is NOT sanitized
query = query.Replace("{0}", keywordSearchTerms.ToUpper());
List<ProjectViewModel> list = null;
using (var context = new MyContext())
{
list = context.Database.SqlQuery<ProjectViewModel>(query, new object[] { }).ToList();
}
return list;
我使用ASP.NET MVC 4,.NET 4.5,SQL Server 2008和实体框架5。
关于如何使SQLQuery <>方法填充查询字符串中参数的所有出现的任何想法?非常感谢您的宝贵时间。
我也尝试过这一点。事实上,我认为这是我的第一次尝试之一。它不会抛出异常,但查询返回零结果。谢谢。 – 2013-04-30 13:54:05
您是否尝试在SQL Management Studio中使用查询? – 2013-04-30 13:56:27
什么是您的keywordSearchTerms? 这是一个单词吗?或多个词? – 2013-04-30 14:36:57