C# MySQL设置密码执行正常,0行受影响但未生效?
我有一个C#应用程序,如果你点击一个按钮,它将获取密码文本框中的任何内容,并尝试在usernamelab.text中使用该用户设置MySQL数据库。但是,这执行得很好,但是我仍然可以在PHPMyAdmin中刷新数据库,并且可以使用旧密码正常工作。新密码拒绝访问,因此即使没有错误,它显然也没有更改密码。有人知道为什么会这样吗 这是按钮的代码C# MySQL设置密码执行正常,0行受影响但未生效?,c#,mysql,C#,Mysql,我有一个C#应用程序,如果你点击一个按钮,它将获取密码文本框中的任何内容,并尝试在usernamelab.text中使用该用户设置MySQL数据库。但是,这执行得很好,但是我仍然可以在PHPMyAdmin中刷新数据库,并且可以使用旧密码正常工作。新密码拒绝访问,因此即使没有错误,它显然也没有更改密码。有人知道为什么会这样吗 这是按钮的代码 private void submitNewMySQLPasswordButton_Click(object sender, EventArgs e) {
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();
}
您需要删除参数周围的引号,否则它只是一个普通字符串
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();
您需要删除参数周围的引号,否则它只是一个普通字符串
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();
不确定是否是关闭的精细标记(因为打字错误)或not@Progman这使得ExecuteOnQuery返回1,但是我仍然可以使用旧密码而不是新密码登录。顺便说一句,MySQL引擎的版本是5.6.5。@Progman,我可以在MySQL.user表中看到,密码确实发生了变化,因为我可以看到哈希值发生了变化,但我仍然可以使用旧的登录。您认为我需要在更新后立即执行刷新权限吗?@sushi7777是的,如上所述,因为您不使用帐户管理语句。非常感谢:)添加“刷新权限”;修复:)不确定是否可以标记为关闭(因为键入错误)或not@Progman这使得ExecuteOnQuery返回1,但是我仍然可以使用旧密码而不是新密码登录。顺便说一句,MySQL引擎的版本是5.6.5。@Progman,我可以在MySQL.user表中看到,密码确实发生了变化,因为我可以看到哈希值发生了变化,但我仍然可以使用旧的登录。您认为我需要在更新后立即执行刷新权限吗?@sushi7777是的,如上所述,因为您不使用帐户管理语句。非常感谢:)添加“刷新权限”;修复:)如果ExecuteOnQuery返回0,则您的“命令”不是“执行良好”。嘿,史蒂夫-谢谢,ExecuteOnQuery应该返回什么值?现在,它在Progman的注释后返回1,但只是想知道这个返回值反映了什么。ExecuteOnQuery返回受命令影响的行数。如果返回0,则未找到任何要更新的内容。如果返回1,则该命令已更新/插入/删除了1行。在任何情况下,您都应该访问MSDN站点上的官方文档,了解此方法和其他ADO.NET方法的每个细节。如果ExecuteOnQuery返回0,则您的“命令”不是“执行良好”。嘿,Steve-谢谢,ExecuteOnQuery应该返回什么值?现在,它在Progman的注释后返回1,但只是想知道这个返回值反映了什么。ExecuteOnQuery返回受命令影响的行数。如果返回0,则未找到任何要更新的内容。如果返回1,则该命令已更新/插入/删除了1行。在任何情况下,您都应该查阅MSDN站点上的官方文档,以了解此方法和其他ADO.NET方法的每个细节