Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MySQL设置密码执行正常,0行受影响但未生效?_C#_Mysql - Fatal编程技术网

C# MySQL设置密码执行正常,0行受影响但未生效?

C# MySQL设置密码执行正常,0行受影响但未生效?,c#,mysql,C#,Mysql,我有一个C#应用程序,如果你点击一个按钮,它将获取密码文本框中的任何内容,并尝试在usernamelab.text中使用该用户设置MySQL数据库。但是,这执行得很好,但是我仍然可以在PHPMyAdmin中刷新数据库,并且可以使用旧密码正常工作。新密码拒绝访问,因此即使没有错误,它显然也没有更改密码。有人知道为什么会这样吗 这是按钮的代码 private void submitNewMySQLPasswordButton_Click(object sender, EventArgs e) {

我有一个C#应用程序,如果你点击一个按钮,它将获取密码文本框中的任何内容,并尝试在usernamelab.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();
}

您需要删除参数周围的引号,否则它只是一个普通字符串

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方法的每个细节