2017-01-22 57 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";