【发布时间】:2014-09-02 13:51:24
【问题描述】:
我在尝试使用实体框架执行带有重复参数的 SQL 查询时遇到了麻烦。
查询是关键字搜索,它在不同的表中查找,因此多次使用相同的参数。我正在使用 LIKE 语句(是的,我知道我应该使用 FULLTEXTSEARCH,但我现在没有时间)。
我已经尝试了这里解释的所有语法:How to use DbContext.Database.SqlQuery<TElement>(sql, params) with stored procedure? EF Code First CTP5 并且没有一个使查询工作(我得到零返回行)。
我什至尝试在运行时构建一个字符串数组,长度等于参数在查询中重复的次数,然后用关键字搜索词填充数组的所有元素。然后我将它作为 object[] 参数 传递。也没用。
唯一可行的方法是进行搜索和替换,这显然是个坏主意,因为参数来自文本输入,我很容易受到 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 和 Entity Framework 5。
关于如何使 SQLQuery 方法填充查询字符串中所有出现的参数有什么想法吗?非常感谢您的宝贵时间。
【问题讨论】:
标签: c# sql sql-server-2008 asp.net-mvc-4 entity-framework-5