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

MySQL数据库member_hwid列空值检查异常:C#代码始终返回非空

问题分析与代码修正

核心错误点

  • SQL语句逻辑错误:原语句中AND优先级高于OR,导致member_hwid = ''的判断会脱离name = @name的约束,匹配所有空字符串的用户,而非指定name的用户。需要将member_hwid IS NULL OR member_hwid = ''用括号包裹,确保逻辑为name匹配 且 (HWID为空或空字符串)。
  • 错误使用数据库方法:ExecuteNonQuery()是用来执行增/删/改语句的,返回受影响的行数(int类型),永远不可能为null。你需要查询数据,应该用ExecuteScalar()来获取查询结果的第一行第一列值。
  • 空值判断失效:由于ExecuteNonQuery()返回int,hwid == null的判断永远不会成立,所以始终进入Not null分支。

修正后的代码示例

方式1:直接获取HWID值判断

public void CHECKANDWRITEHWID()
{
    string server = "72.167.59.139";
    string database = "DATABASENAME";
    string uid = "YOURUID";
    string password = "YOURPASSWORD";
    string ssl = "None";
    string connectionString = $"SERVER={server};DATABASE={database};UID={uid};PASSWORD={password};SSL Mode={ssl};";
    
    using var connection = new MySqlConnection(connectionString);
    connection.Open();
    
    // 修正SQL逻辑,用括号包裹OR条件
    using var command = new MySqlCommand("SELECT member_hwid FROM core_members WHERE name = @name AND (member_hwid IS NULL OR member_hwid = '');", connection);
    command.Parameters.AddWithValue("@name", maskedTextBox1.Text);
    
    // 用ExecuteScalar获取查询结果
    var hwidResult = command.ExecuteScalar();
    
    // 判断HWID是否为空或空字符串
    if (hwidResult == null || string.IsNullOrEmpty(hwidResult.ToString()))
    {
        MessageBox.Show("HWID为空,执行更新逻辑");
        // 这里调用你的更新HWID函数
    }
    else
    {
        MessageBox.Show("HWID已存在,执行登录逻辑");
        // 这里调用你的登录逻辑
    }
}

方式2:高效判断是否需要更新(推荐)

直接查询是否存在符合条件的记录,避免返回不必要的数据:

public void CHECKANDWRITEHWID()
{
    string server = "72.167.59.139";
    string database = "DATABASENAME";
    string uid = "YOURUID";
    string password = "YOURPASSWORD";
    string ssl = "None";
    string connectionString = $"SERVER={server};DATABASE={database};UID={uid};PASSWORD={password};SSL Mode={ssl};";
    
    using var connection = new MySqlConnection(connectionString);
    connection.Open();
    
    // 使用EXISTS判断是否存在目标记录,性能更优
    using var command = new MySqlCommand("SELECT EXISTS(SELECT 1 FROM core_members WHERE name = @name AND (member_hwid IS NULL OR member_hwid = ''));", connection);
    command.Parameters.AddWithValue("@name", maskedTextBox1.Text);
    
    // 转换结果:1表示存在(需要更新),0表示不存在(执行登录)
    int needUpdate = Convert.ToInt32(command.ExecuteScalar());
    
    if (needUpdate == 1)
    {
        MessageBox.Show("HWID为空,执行更新逻辑");
        // 调用更新HWID函数
    }
    else
    {
        MessageBox.Show("HWID已存在,执行登录逻辑");
        // 调用登录逻辑
    }
}

内容的提问来源于stack exchange,提问作者The Guild Of ASMR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:15:11