C# C MySql语句。发现我的错误!

C# C MySql语句。发现我的错误!,c#,mysql,C#,Mysql,正在尝试从MySql数据库执行select语句。当我直接插入变量时,以下方法有效: MySqlCommand playerSearch = conn.CreateCommand(); playerSearch.CommandText = @"select username from players where username like '%" + username + "%'"; playerSearch.Prepare(); // Execute the command, get the r

正在尝试从MySql数据库执行select语句。当我直接插入变量时,以下方法有效:

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.
我没有从查询中得到任何结果。到目前为止,我还没有弄明白为什么这不起作用。有什么建议吗?

删除内部引号

playerSearch.Parameters.AddWtihValue("@username", "%" + username + "%");
删除内部引号

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

好的,只要运行Mysql并直接输入query,Mysql服务器就会告诉您语法错误在哪里,如果有语法错误的话。
最好的方法是,让程序在运行时以纯文本形式显示查询,然后将其放入mysql命令行。

好的,只要运行mysql并直接输入查询,mysql服务器就会向您提供语法错误所在的信息(如果有)。
最好的方法是,让程序在运行时以纯文本形式显示查询,然后将其放入mysql命令行。

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

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.

更好的是,完全避免编写此类查询。查询中的初始通配符阻止数据库使用任何索引。使用真正的机制。LIKE是一个糟糕的替代品。

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

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.

更好的是,完全避免编写此类查询。查询中的初始通配符阻止数据库使用任何索引。使用真正的机制。LIKE是一个差劲的替代品。

很有魅力,谢谢。由于AddWithValue,猜测是这种情况吗?数据库客户端库知道如何正确处理引用。更好的是,完全删除LIKE运算符,使用全文索引。非常有效,谢谢。猜测这是由于AddWithValue造成的?数据库客户端库知道如何正确处理引用。更好的是,完全删除LIKE运算符,使用全文索引。