You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#登录逻辑中让MySQL校验mgroup_others列是否为7?

C# MySQL登录新增权限校验的问题修正

原运行代码(仅校验用户名密码)

private void button1_Click(object sender, EventArgs e)
{
    string server = "207.244.70.217";
    string database = "nextgene_NGH";
    string uid = "EXAMPLEUID";
    string password = "EXAMPLEPASSWORD";
    string ssl = "None";

    string connectionString = $"SERVER={server};DATABASE={database};UID={uid};PASSWORD={password};SSL Mode={ssl};";    
    using var connection = new MySqlConnection(connectionString);
    connection.Open();
    using var command = new MySqlCommand("SELECT members_pass_hash FROM core_members WHERE name = @name;", connection);
    command.Parameters.AddWithValue("@name", maskedTextBox1.Text);
    var hashedPassword = (string) command.ExecuteScalar();
    if (!(hashedPassword is null && !BCrypt.Net.BCrypt.Verify(maskedTextBox2.Text, hashedPassword)))
    {
        
        MessageBox.Show("Login Successful");
    }
}

需求说明

原代码仅能通过用户名和密码验证登录,现在需要新增校验逻辑:从core_members表的mgroup_others列取值,判断其值是否为7,只有同时满足密码正确且mgroup_others=7时,才允许登录。

用户改写的错误代码

private void button1_Click(object sender, EventArgs e)
{
    string server = "207.244.70.217";
    string database = "nextgene_NGH";
    string uid = "EXAMPLEUID";
    string password = "EXAMPLEPASSWORD";
    string ssl = "None";
    string vipcheck = "7";

    string connectionString = $"SERVER={server};DATABASE={database};UID={uid};PASSWORD={password};SSL Mode={ssl};";    
    using var connection = new MySqlConnection(connectionString);
    connection.Open();
    using var command = new MySqlCommand("SELECT members_pass_hash, mgroup_others FROM core_members WHERE name = @name;", connection);
    command.Parameters.AddWithValue("@name", maskedTextBox1.Text);
    var hashedPassword = (string) command.ExecuteScalar();
    if (!(hashedPassword is null && !BCrypt.Net.BCrypt.Verify(maskedTextBox2.Text && vipcheck != mgroup_others, hashedPassword)))
    {
        
        MessageBox.Show("Login Successful");
    }
}

错误分析及修正代码

错误点:

  1. 数据读取方式错误:ExecuteScalar()仅能获取查询结果的第一列第一行值,无法同时获取members_pass_hash和mgroup_others两个字段,需改用MySqlDataReader读取多字段。
  2. 条件判断语法/逻辑错误:BCrypt.Verify的参数传递完全错误,将密码验证与权限校验逻辑混乱在一起,导致语法错误。
  3. 数据类型处理不当:mgroup_others为数字类型,不应以字符串方式比较,直接用整数类型处理更准确。

修正后的代码:

private void button1_Click(object sender, EventArgs e)
{
    string server = "207.244.70.217";
    string database = "nextgene_NGH";
    string uid = "EXAMPLEUID";
    string password = "EXAMPLEPASSWORD";
    string ssl = "None";
    const int requiredMgroupValue = 7; // 定义常量存储需要校验的权限值

    string connectionString = $"SERVER={server};DATABASE={database};UID={uid};PASSWORD={password};SSL Mode={ssl};";    
    using var connection = new MySqlConnection(connectionString);
    connection.Open();
    
    // 同时查询密码哈希和权限字段
    using var command = new MySqlCommand("SELECT members_pass_hash, mgroup_others FROM core_members WHERE name = @name;", connection);
    command.Parameters.AddWithValue("@name", maskedTextBox1.Text);
    
    // 使用DataReader读取查询结果
    using var reader = command.ExecuteReader();
    if (reader.Read()) // 确认是否找到匹配的用户
    {
        string storedHashedPassword = reader.GetString("members_pass_hash");
        int userMgroupValue = reader.GetInt32("mgroup_others");
        
        // 同时校验密码正确性和权限值
        if (BCrypt.Net.BCrypt.Verify(maskedTextBox2.Text, storedHashedPassword) && userMgroupValue == requiredMgroupValue)
        {
            MessageBox.Show("登录成功");
        }
        else
        {
            MessageBox.Show("用户名/密码错误,或无权限登录");
        }
    }
    else
    {
        MessageBox.Show("未找到该用户");
    }
}

代码说明:

  • 使用MySqlDataReader读取查询返回的多个字段,确保能获取到mgroup_others的值。
  • 拆分校验逻辑:先验证密码是否正确,再判断mgroup_others是否等于7,逻辑清晰且符合语法要求。
  • 用整数类型处理mgroup_others字段,避免字符串比较可能出现的问题。
  • 增加了未找到用户的提示,提升用户体验。

内容的提问来源于stack exchange,提问作者Ryan Ellis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 08:12:45