所以目前我有这个:
private void button1_Click(object sender, EventArgs e) {
string username = txtboxUsername.Text;
string password = txtboxPassword.Text;
string salt = string.Empty;
connection.Open();
MySqlCommand sql = new MySqlCommand("SELECT salts FROM users WHERE usernames = @username;", connection);
sql.Parameters.AddWithValue("@username", username);
using (MySqlDataReader reader = sql.ExecuteReader()) {
if (reader.HasRows) {
reader.Read();
salt = reader.GetString(0);
} else {
MessageBox.Show(sql.CommandText);
}
}
}
现在问题是,当我运行这个时,我没有收到编译器错误,但是 sql.Parameters.AddWithValue( .. );部分实际上并未将字符串“用户名”添加到 sql 查询中。它只是将其保留在@username 处。有谁知道我在这里做错了什么?
最佳答案
您忘记调用.Prepare()
。
MySqlCommand sql = new MySqlCommand("SELECT salts FROM users WHERE usernames = @username;", connection);
sql.Prepare(); // You forgot this *********************
sql.Parameters.AddWithValue("@username", username);
下面是一个使用 using
block 使用适当资源的示例:
using (MySqlConnection lconn = new MySqlConnection(connString))
{
lconn.Open();
using (MySqlCommand cmd = new MySqlCommand())
{
cmd.Connection = lconn;
cmd.CommandText = "update " + activeTblName + " set bn=@bn where qId=@qId";
cmd.Prepare();
cmd.Parameters.AddWithValue("@qId", pqId);
cmd.Parameters.AddWithValue("@bn", ptheValue);
cmd.ExecuteNonQuery();
}
}
相应地调整您的资源以自动为您清理资源。 MSDN 展示了所有这些的示例。
关于c# - C# 和 SQL 新手 - 为什么我的 .AddWithValue 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38348223/