2017-01-22 52 views
-2

,所以我在想,爲什麼這個SQL查詢不返回任何內容:搜索數據庫,其列conatins特定字符串[搜尋查詢]

mySqlCommand.CommandText = "SELECT * FROM `users` WHERE Username LIKE %@Username% ORDER BY Id DESC"; 
mySqlCommand.Parameters.AddWithValue("@Username", this.search.Text); 

它不是一個讀者的問題或像這樣的東西,如果我刪除「WHERE用戶名LIKE%@用戶名%」,它工作正常。 我稱之爲一個文本框的按鍵響應,事件這整個MySQL的查詢。 this.search是文本框。我想搜索用戶名列包含我在文本框中輸入的字符的行。

+0

,使用'=',而不是LIKE –

+0

另外,LIKE'%@用戶名'%看,這是一個字符串,你需要把它作爲一個。 –

+0

@ Fred-ii-我想檢查用戶名列是否包含字符串,=不是我需要的那個 –

回答

0

嘗試使用

//For LIKE query 
SqlParameter parameter = new SqlParameter("@query", SqlDbType.NVarChar); 
parameter.Value = string.Format("%{0}%", this.search.Text); 
IList<Users> results = ctx.Database.SqlQuery<Users>("SELECT * FROM Users WHERE Username LIKE @query", parameter).ToList(); 
+0

nope,不起作用 –

+0

是否確定要使用@query沒有任何引號?它爲我工作比一年多了,如果你不使用的NVarChar –

+0

我不知道如何使用MySQL使用,因爲其中的一些變量都從來沒有宣佈重新驗證的SqlDbType,所以我試圖修改它我的需求,但它沒有工作 –

0

我解決了它使用此:

mySqlCommand.CommandText = "SELECT * FROM `users` WHERE Username LIKE @Username ORDER BY Id DESC"; 
mySqlCommand.Parameters.AddWithValue("@Username", "%" + this.search.Text + "%"); 
0

我會強烈建議使用存儲過程,將有助於防止SQL注入攻擊,並且要禁止你的應用程序使用插入,更新和刪除腳本,只允許它使用存儲過程的執行語句。

但是你想,如果你正在尋找一個特定的字符串,這條線從

mySqlCommand.CommandText = "SELECT * FROM用戶WHERE Username LIKE %@Username% ORDER BY Id DESC";

改變

mySqlCommand.CommandText = "SELECT * FROM用戶WHERE Username LIKE '%@Username%' ORDER BY Id DESC";