首页 > 解决方案 > MySQL SET PASSWORD 执行良好,0 行受影响但未生效?

问题描述

我有一个 C# 应用程序,如果您单击一个按钮,它将获取密码文本框的任何内容,并尝试在 usernameLabel.Text 中使用该用户设置 MySQL 数据库。但是,这执行得很好,但我仍然可以在 PHPMyAdmin 中刷新数据库,并且使用旧密码可以正常工作。新密码会拒绝访问,因此即使没有错误,它也显然没有更改密码。有谁知道为什么会这样?

这是按钮的代码。

private void submitNewMySQLPasswordButton_Click(object sender, EventArgs e)
{
    var connection = ConfigurationManager.ConnectionStrings["system"].ConnectionString;
    MySqlConnection myconn = new MySqlConnection(connection);

    myconn.Open();

    MySqlCommand command = myconn.CreateCommand();
    command.CommandText = "UPDATE mysql.user SET Password=PASSWORD('@NewPassHere') WHERE User='@User';";
    command.Parameters.AddWithValue("@User", usernameLabel.Text);
    //command.Parameters.AddWithValue("?hostname", "%");
    command.Parameters.AddWithValue("@NewPassHere", newPasswordTextBox.Text);
    int rows = command.ExecuteNonQuery();

    myconn.Close();
}

标签: c#mysql

解决方案


你需要去掉参数周围的引号,否则它只是一个普通的字符串。

command.CommandText = "UPDATE mysql.user SET Password=PASSWORD(@NewPassHere) WHERE User=@User;";
command.Parameters.Add("@User", SqlDbType.VarChar).Value=usernameLabel.Text;
command.Parameters.Add("@NewPassHere", SqlDbType.VarChar).Value=newPasswordTextBox.Text);
int rows = command.ExecuteNonQuery();

推荐阅读