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

在MySQL存储bcrypt哈希密码遇阻,WPF添加用户功能故障求助

解决WPF添加用户时bcrypt哈希存储MySQL失败的问题

看起来你现在卡在添加用户的功能上了,不管是哈希还是未哈希的密码都存不进数据库,而且还没错误提示——先别着急,咱们一步步排查:

第一步:先加异常捕获,搞清楚到底哪里错了

你现在的代码直接弹成功提示,但实际没写入,大概率是有异常被吞了。先给按钮点击事件加上try-catch,把错误信息打出来,这样能定位问题:

private void btnAdd_Click(object sender, RoutedEventArgs e)
{
    // 先验证输入不为空
    if (string.IsNullOrWhiteSpace(tbUsername.Text) || string.IsNullOrWhiteSpace(tbPassword.Text))
    {
        MessageBox.Show("Gebruikersnaam en wachtwoord mogen niet leeg zijn!");
        return;
    }

    try
    {
        clsDB cdb = new clsDB();
        // 先做bcrypt哈希(记得先装BCrypt.Net-Next的NuGet包!)
        string hashedPassword = BCrypt.Net.BCrypt.HashPassword(tbPassword.Text);
        cdb.Adduser(tbUsername.Text, hashedPassword);
        MessageBox.Show("user toegevoegd!");
    }
    catch (Exception ex)
    {
        MessageBox.Show($"Fout bij toevoegen gebruiker: {ex.Message}");
        // 也可以把详细错误输出到调试窗口,方便排查
        System.Diagnostics.Debug.WriteLine(ex.ToString());
    }
}

第二步:检查clsDB.Adduser方法的实现

问题大概率出在这个数据库操作方法里,一定要用参数化查询(避免SQL注入,同时防止特殊字符导致的语法错误),还要确保哈希后的密码能存进数据库:

public void Adduser(string username, string hashedPassword)
{
    // 替换成你的MySQL连接字符串
    string connectionString = "server=localhost;database=jouw_db;user=jouw_user;password=jouw_wachtwoord;";
    
    using (MySqlConnection conn = new MySqlConnection(connectionString))
    {
        conn.Open();
        // 注意:users表的password字段必须设为VARCHAR(60)或者更长,因为bcrypt哈希固定是60字符
        string query = "INSERT INTO users (username, password) VALUES (@Username, @Password)";
        
        using (MySqlCommand cmd = new MySqlCommand(query, conn))
        {
            cmd.Parameters.AddWithValue("@Username", username);
            cmd.Parameters.AddWithValue("@Password", hashedPassword);
            
            int rowsAffected = cmd.ExecuteNonQuery();
            // 如果没有行被影响,说明插入失败
            if (rowsAffected == 0)
            {
                throw new Exception("Geen gegevens toegevoegd. Controleer de query en database instellingen.");
            }
        }
    }
}

第三步:几个关键检查点

  • NuGet包是否安装:确保你已经安装了BCrypt.Net-Next(或者BCrypt.Net),不然哈希方法会报错。
  • 数据库表结构:password字段的长度必须≥60,bcrypt哈希后的字符串固定是60字符,长度不够会截断导致存储失败。另外如果username字段设了唯一约束,重复的用户名也会插入失败。
  • 数据库权限:连接数据库的用户必须有INSERT权限,不然会被拒绝写入。
  • 连接字符串正确性:确认服务器地址、数据库名、用户名密码都没错,能不能正常连接到MySQL。

先按这几步排查,把异常信息搞出来,基本上就能定位问题所在了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:46:15