2010-11-28 62 views
1

试图从MySql数据库执行select语句。下面的作品,当我插上直接变量:C#MySql语句。发现我的错误!

MySqlCommand playerSearch = conn.CreateCommand(); 
playerSearch.CommandText = @"select username from players where username like '%" + username + "%'"; 
playerSearch.Prepare(); 
// Execute the command, get the restuls, etc. 

但是如果我试图用paramater将做到这一点的首选方式,如:

MySqlCommand playerSearch = conn.CreateCommand(); 
playerSearch.CommandText = @"select username from players where username like @username"; 
playerSearch.Prepare(); 
playerSearch.Parameters.AddWtihValue("@username", "'%" + username + "%'"); 
// Execute the command, get the restuls, etc. 

我没有得到任何结果从查询回来。到目前为止,我还没有想出为什么这不起作用。有什么建议?

回答

6

删除内部引号。

playerSearch.Parameters.AddWtihValue("@username", "%" + username + "%"); 
+0

工作就像一个魅力,谢谢。猜测这是由于AddWithValue的情况? – vimalloc 2010-11-28 21:47:25

-1

那么,只需运行Mysql并直接输入查询,比mysql服务器会给你的信息,如果你的语法错误是,如果有的话。 最好的方法是,让程序以纯文本(我的意思是在运行时)显示您的查询,然后将它放到mysql命令行中。

1

构建通配符到查询,而不是数据:

MySqlCommand playerSearch = conn.CreateCommand(); 
playerSearch.CommandText = @"select username from players where username like '%' + @username + '%'"; 
playerSearch.Prepare(); 
playerSearch.Parameters.AddWtihValue("@username", username); 
// Execute the command, get the restuls, etc. 

更妙的是,完全避免写这有点像查询。查询中的初始通配符会阻止数据库使用任何索引。使用真正的full-text search机制。 LIKE是一个可怜的替代品。