對於數據庫的模糊查詢我們應該不陌生,就是用關鍵字like,通配符“%”進行的查詢。在敲機房重構時,遇到一個模糊查詢的問題,就是在sql數據庫中的模糊查詢語句可以查出來數據,但相同的語句放到C#語句中利用參數進行模糊查詢,運行時不報錯,但就是查不出任何數據。剛開始很是納悶,就去網上查一些模糊查詢的資料,但都沒有一針見血的回答,不過巨人們還是給了很多指引噠,隨後自己便在巨人的指引下不斷地進行各種數據的嘗試,終於研究出來了。程序員的心真的是跌宕起伏啊^_^
那在C#中要如何進行模糊查詢呢?
首先我們來分析一下,爲什麼相同的sql語句放到C#中通過變量查詢就查不出來呢?
因爲ADO.NET進行參數化時會自動將參數值包含在單引號中,ADO.NET中識別參數的標識符是使用“@”符號,也就是C#中含有“@”符號的標識符,在ADO.NET中會認爲是參數,但如果在SQL語句中將參數標識符@放在單引號中,單引號中的參數標識“@”只會被當成字符串!這就是爲什麼我們總查不出數據。
以下代碼是無法查出數據的sql語句:
string sql="select * from WrokLogInfo where userName like '%@userName%'";
那正確的sql模糊查詢語句是什麼呢?
string sql = "select * from WorkLogInfo where userName like '%'+@userName+'%'";
我們需要把sql語句中的通配符%,單獨標識出來,然後再加上變量@userName。
看到這裏有沒有讀者腦中飄過這樣的問題:爲什麼查詢語句中要用單引號將%引起來呢?
我們都知道在sql的查詢語句中單引號就起着C#語句中字符串雙引號的作用,在sql中是沒有雙引號的。