2012-11-07 21 views
1

從我的ASP.NET應用程序我想這個查詢發出到MySQL在MySQL查詢使用文字下劃線從C#

SELECT * FROM responses WHERE field_id LIKE '3\_%' 

換句話說,我正在尋找記錄中,其中第二個字符是下劃線的文字字符。

通過模型設計器生成的代碼看起來是這樣的:

public virtual RiskAnalysis.responsesDataTable GetResponseGroupForAnalysis(int raid, string fieldid) { 
    this.Adapter.SelectCommand = this.CommandCollection[2]; 
    this.Adapter.SelectCommand.Parameters[0].Value = ((int)(raid)); 
    if ((fieldid == null)) { 
     throw new global::System.ArgumentNullException("fieldid"); 
    } 
    else { 
     this.Adapter.SelectCommand.Parameters[1].Value = ((string)(fieldid)); 
    } 
    RiskAnalysis.responsesDataTable dataTable = new RiskAnalysis.responsesDataTable(); 
    this.Adapter.Fill(dataTable); 
    return dataTable; 
} 

如果我調用這個函數像這樣:

string filter_string = @"3\_%";  
ResponsesAdapter.GetResponseGroupForAnalysis(10, filter_string); 

MySQL日誌報告查詢看起來像這樣:

SELECT  * 
FROM   responses 
WHERE  (ra_id = 10) AND (field_id LIKE '3\\_%') 

換句話說,我知道我失去了一些東西言自明這裏,但我怎麼PLAC e在沒有C#(un)的查詢中,MySQL的轉義反斜槓有助於轉義它?

+0

如果你想在你的C#代碼中添加另一個反斜槓?我知道這聽起來違反直覺,但它可能會向庫顯示你想要一個實際的反斜槓。 –

+0

然後我得到'SELECT * FROM response WHERE(ra_id = 10)AND(field_id LIKE'3 \\\\ _%')',它將匹配field_id以3開頭的記錄\\ [單個字符] [0個或更多個字符] –

回答

0

好吧,看起來(通過實驗 - 很高興聽到解釋或文檔鏈接),在MySQL (field_id LIKE '3\_%');相當於(field_id LIKE '3\\_%');,兩者都會找到field_id以'3_'開頭的記錄。讓我很困惑 - 感謝Mahmoud和René試圖理解我在做什麼!

0

在標準的SQL,您可以使用ESCAPE關鍵字設置一個轉義字符。

的MySQL遵循這個標準的SQL,由LIKE謂詞文件指出:

像這樣:

... 

field_id LIKE '3\_%' ESCAPE '\' 

這將使通配符_被視爲字符串文字。

希望這你問什麼。

+0

我想你建議我將轉義字符從\更改爲C#@「...」語法不會干擾的其他內容,但如果可能的話,我不想篡改生成的查詢。 –

+0

@ChrisJones - 不,這是執行此操作的標準SQL方式。試試這種方式。 –