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

C#连接MySQL获取COUNT值异常,需依据结果展示对应图片

解决MySQL COUNT值获取与展示逻辑问题

问题背景

需根据MySQL查询返回的COUNT值执行对应逻辑:

  • COUNT为0:不执行任何操作
  • COUNT等于1:展示指定图片
  • COUNT大于1:展示另一张图片

当前问题:尝试MySqlDataReader、ExecuteScalar等方法无法正确获取对应行数,使用他人代码后结果始终为6(实际查询返回6行,但需要的是每个idevent对应的独立COUNT值)

原代码存在的问题

  1. SQL语句错误:
    • INNER JOIN event未指定连接条件,会生成笛卡尔积,导致COUNT结果完全错误
    • 表名拼写不一致:SQL中同时出现event和evento,属于笔误
  2. 未正确读取COUNT数值:仅用reader.HasRows判断是否有结果,无法获取COUNT的具体值
  3. 资源未正确释放:数据库连接、命令、Reader未使用using语句,会导致资源泄漏
  4. 逻辑错误:循环中重复添加PatientColumn列,会造成DataGridView列重复

修正后的代码

private void patient()
{
    if (OpenEventMissionData.Rows.Count == 0)
        return;

    // 复用数据库连接,避免循环内重复创建
    string connStr = ConfigurationManager.ConnectionStrings["dbx"].ConnectionString;
    using (MySqlConnection connection = new MySqlConnection(connStr))
    {
        connection.Open();
        // 参数化SQL,防止注入并修正连接条件、表名拼写
        string sql = @"SELECT COUNT(*) 
                       FROM patient 
                       INNER JOIN evento ON patient.ID_EVENT = evento.ID_EVENT 
                       WHERE patient.ID_EVENT = @idevent AND evento.EVENT_OPEN = 1;";

        using (MySqlCommand cmd = new MySqlCommand(sql, connection))
        {
            foreach (DataGridViewRow row in OpenEventMissionData.Rows)
            {
                if (row.Cells[1].Value == null)
                    continue;

                string idevent = row.Cells[1].Value.ToString();
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@idevent", idevent);

                // 用ExecuteScalar直接获取COUNT值
                object result = cmd.ExecuteScalar();
                if (result != DBNull.Value && int.TryParse(result.ToString(), out int count))
                {
                    // 根据COUNT值执行对应逻辑
                    if (count == 1)
                    {
                        // 展示第一张图片的逻辑,示例:
                        // row.Cells["ImageColumn"].Value = Image.FromFile("path/to/image1.png");
                    }
                    else if (count > 1)
                    {
                        // 展示第二张图片的逻辑,示例:
                        // row.Cells["ImageColumn"].Value = Image.FromFile("path/to/image2.png");
                    }
                    // count为0时不执行操作
                }
            }
        }
    }
}

关键说明

  • 参数化查询:避免SQL注入,同时解决字符串拼接带来的语法问题
  • ExecuteScalar:专门用于获取单行单列的结果,比ExecuteReader更高效直接
  • using语句:自动释放数据库连接、命令等资源,避免泄漏
  • 修正SQL连接:添加INNER JOIN的连接条件,修正表名拼写错误,确保查询结果准确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:09:07