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

更换主机后MySQL代码出现System.ArgumentNullException错误求助

问题分析与解决方案

错误根源

你遇到的System.ArgumentNullException是因为调用BCrypt.Net.BCrypt.Verify时传入了null参数。具体场景是:当数据库查询不到符合条件的用户(比如用户名错误、HWID不匹配、不属于VIP组),ExecuteScalar()会返回null,此时hashedPassword变量为null,你直接将它传入Verify方法,就触发了这个异常。

另外原代码的条件判断逻辑混乱,!(hashedPassword is null && !BCrypt...)的写法完全错误,导致逻辑分支判断失效。

修复步骤与代码

1. 核心调整点

  • 先判断查询结果是否为null,避免传入null给Verify方法
  • 扩大try-catch范围,覆盖数据库连接、查询等所有可能出错的环节
  • 修正密码验证的判断逻辑,让分支更清晰

2. 修复后的完整代码

private void button1_Click(object sender, EventArgs e)
{
    try
    {
        string server = "72.167.59.139";
        string database = "DATABASENAMEHERE";
        string uid = "USERIDHERE";
        string password = "PASSWORDHERE";
        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 AND mgroup_others = 7 AND member_hwid = @hwid;", connection);
        command.Parameters.AddWithValue("@name", maskedTextBox1.Text);
        command.Parameters.AddWithValue("@hwid", HWIDNumber);

        var hashedPassword = command.ExecuteScalar() as string;

        // 先判断是否查询到匹配用户
        if (hashedPassword == null)
        {
            MessageBox.Show("用户名错误、非VIP用户或HWID不匹配");
            return;
        }

        // 验证密码是否正确
        if (BCrypt.Net.BCrypt.Verify(maskedTextBox2.Text, hashedPassword))
        {
            if (checkBox1.Checked)
            {
                // 注意:明文保存密码存在安全风险,建议改为保存哈希值或加密存储
                Properties.Settings.Default.username = maskedTextBox1.Text;
                Properties.Settings.Default.password = maskedTextBox2.Text;
                Properties.Settings.Default.Save();
            }
            var vip = new vipmember();
            vip.Show();
            HM();
        }
        else
        {
            MessageBox.Show("密码错误");
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show($"错误信息: {ex.Message}\n错误详情: {ex.StackTrace}");
    }
}

额外建议

  • 确认HWIDNumber变量是否有有效值,避免查询条件中的HWID为null或空字符串
  • 不要明文保存用户密码到Properties.Settings,这是严重的安全隐患,建议保存密码的哈希值或者使用加密存储
  • 可以在数据库操作前先检查maskedTextBox1.Text和maskedTextBox2.Text是否为空,提前提示用户输入完整信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 11:48:27