如果该列username
是文本列,则每次要在该列上搜索时,应将文字值括在单引号之间
string username = "Steve";
var query = $"SELECT id, username, password, salt FROM users WHERE username='{username}'";
然而,这是为两个主要问题制作查询文本的错误方法:
Sql Injection:黑客用来在您的代码中插入可能破坏您的数据库数据的恶意文本的技术参见:Sql Injection
解析问题:包含单引号的字符串需要正确格式化,十进制值需要转换为具有对数据库区域设置有效的正确小数分隔符的字符串,日期......嗯......
因此,参数方法将使您摆脱所有这些问题
var query = @"SELECT id, username, password, salt
FROM users WHERE username=@username";
using(MySqlConnection cnn = new MySqlConnection(.......))
using(MySqlCommand cmd = new MySqlCommand(query, cnn))
{
cnn.Open();
cmd.Parameters.Add("@username", MySqlDbType.VarChar).Value = username;
using(MySqlDataReader reader = cmd.ExecuteReader())
{
..... use your data
}
}