通過完美的SQL查詢,我的意思是說,裏面的WebMatrix,如果我執行以下查詢,它的工作完美:爲什麼C#不會接受(看似)完美的Sql Server CE查詢?
SELECT page AS location, (len(page) - len(replace(UPPER(page), UPPER('o'), '')))/len('o') AS occurences, 'pageSettings' AS tableName FROM PageSettings WHERE page LIKE '%o%'
UNION
SELECT pageTitle AS location, (len(pageTitle) - len(replace(UPPER(pageTitle), UPPER('o'), '')))/len('o') AS occurences, 'ExternalSecondaryPages' AS tableName FROM ExternalSecondaryPages WHERE pageTitle LIKE '%o%'
UNION
SELECT eventTitle AS location, (len(eventTitle) - len(replace(UPPER(eventTitle), UPPER('o'), '')))/len('o') AS occurences, 'MainStreetEvents' AS tableName FROM MainStreetEvents WHERE eventTitle LIKE '%o%'
我在這裏使用'o'
爲靜態搜索字符串時進行搜索。沒問題,但不是非常動態的。
現在,當我把這個查詢寫成C#中的一個字符串,並且我認爲它應該是(甚至正如我以前所做的那樣),我得到一個服務器端錯誤,指出該字符串的格式不正確。下面是錯誤的PIC:
和(雖然我只測試的輸出,我應該讓它退出犯錯誤),這裏是真正的C#(即.cshtml
)頁面查詢數據庫:
@{
Layout = "~/Layouts/_secondaryMainLayout.cshtml";
var db = Database.Open("Content");
string searchText = Request.Unvalidated["searchText"];
string selectQueryString = "SELECT page AS location, (len(page) - len(replace(UPPER(page), UPPER(@0), '')))/len(@0) AS occurences, 'pageSettings' AS tableName FROM PageSettings WHERE page LIKE '%' + @0 + '%' ";
selectQueryString += "UNION ";
selectQueryString += "SELECT pageTitle AS location, (len(pageTitle) - len(replace(UPPER(pageTitle), UPPER(@0), '')))/len(@0) AS occurences, 'ExternalSecondaryPages' AS tableName FROM ExternalSecondaryPages WHERE pageTitle LIKE '%' + @0 + '%' ";
selectQueryString += "UNION ";
selectQueryString += "SELECT eventTitle AS location, (len(eventTitle) - len(replace(UPPER(eventTitle), UPPER(@0), '')))/len(@0) AS occurences, 'MainStreetEvents' AS tableName FROM MainStreetEvents WHERE eventTitle LIKE '%' + @0 + '%'";
@:beginning <br/>
foreach (var row in db.Query(selectQueryString, searchText))
{
@:entry
@:@row.location
@:@row.occurences
@:@row.tableName
<br/>
}
}
由於它是在foreach (var row in db.Query(selectQueryString, searchText))
線犯錯誤,這很大程度上表明,什麼是錯我的查詢,然而,一切似乎是正確的給我介紹的語法在這裏,如果我查詢它甚至執行到完美數據庫(介意你,未參數化)直接。從邏輯上講,我認爲我在參數化這個查詢時涉及到的語法有問題,但是,我的雙重和三重檢查(以及我過去的經驗)堅持這裏的一切看起來都很不錯。
我弄亂了參數化這個查詢所涉及的語法,或者是我在忽略的其他玩法嗎?
我知道我可以告訴你,因爲它已經被測試過了,我從查詢字符串得到的值確實是我期望的值,但是因爲實際上沒有在.cshtml
頁面上還有其他許多內容,這就是我可以告訴你的全部內容。
如果傳入'.Query()'的參數對象類型與SQL @ 0變量所期望的不匹配,通常會發生此錯誤。在這種情況下,我想知道在查詢字符串中的多個位置指定相同的參數是否有效。 – 2013-07-02 13:59:52
是因爲有0而不是0嗎?真的只是一個平底船 –
@ebyrob其實,這是合法的,因爲我之前使用過它(並且感謝它的好處)。但待機,我想我已經發現了這個問題。將在一秒內發佈。 – VoidKing