我遇到了麻煩,嘗試使用實體框架重複執行帶有參數的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