标签:asp-net-mvc-4 entity-framework-5 sql-server-2008 sql c
我在尝试使用实体框架执行具有重复参数的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的任何想法.方法填充查询字符串中所有出现的参数?非常感谢您的宝贵时间.
解决方法:
尝试这个:
string query =
@"SELECT Field1,
Field2
FROM Table1
WHERE UPPER(Field1) LIKE '%' + @searchTerm + '%'
OR UPPER(Field2) LIKE '%' + @searchTerm + '%'";
context.SqlQuery<ProjectViewModel>(query, new SqlParameter("@searchTerm", searchTerm)).ToList();
标签:asp-net-mvc-4,entity-framework-5,sql-server-2008,sql,c 来源: https://codeday.me/bug/20191123/2067028.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。