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

C#如何判断MySQL数据库中指定骨架表是否无任何存储数据

问题根因
  • 事件选择错误:Form_Initialize 属于窗体构造阶段,此时窗体资源还未完全初始化,直接调用窗体关闭/程序退出方法会触发资源销毁异常;Form_Activated 每次窗体获得焦点都会触发,会导致检测逻辑重复执行,不符合业务需求。
  • 空表判断逻辑错误:select count(uname) from employee 无论表内是否有数据,都会返回一行统计结果,因此 reader.HasRows 永远为真,你当前的判断条件完全无法识别空表场景。
  • 跨线程UI操作违规:WinForm 禁止在非主线程操作UI控件,你新启线程运行 User_Managment.ShowDialog() 会直接抛出跨线程调用异常。
  • 资源释放顺序错误:你在if分支中先调用 Form1_Load 再关闭DataReader,会导致连接资源泄漏。
最优解决方案

建议直接在程序入口(Program.cs 的 Main 方法)执行空表检测,无需先初始化登录窗体,从根源避免窗体销毁异常:

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    
    // 先执行空表检测逻辑
    try
    {
        using (MySqlConnection connection = Connect())
        {
            string checkSql = "SELECT COUNT(uname) FROM employee";
            MySqlCommand command = new MySqlCommand(checkSql, connection);
            int userCount = Convert.ToInt32(command.ExecuteScalar());
            
            if (userCount == 0)
            {
                DialogResult dialog = MessageBox.Show("当前用户表为空,无法完成登录,是否现在新增用户?", "数据库为空", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (dialog == DialogResult.Yes)
                {
                    Application.Run(new User_Managment());
                    return;
                }
                else
                {
                    Application.Exit();
                    return;
                }
            }
        }
    }
    catch (MySqlException ex)
    {
        MessageBox.Show(ex.Message, "数据库连接错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
        Application.Exit();
        return;
    }
    
    // 表内有用户,正常启动登录窗体
    Application.Run(new Form1());
}
若需保留在登录窗体中执行的修正方案

将检测逻辑迁移到 Form_Load 事件,修正判断逻辑和UI操作规则即可:

private void Form1_Load(object sender, EventArgs e)
{
    try
    {
        using (MySqlConnection connection = Connect())
        {
            string checkSql = "SELECT COUNT(uname) FROM employee";
            MySqlCommand command = new MySqlCommand(checkSql, connection);
            int userCount = Convert.ToInt32(command.ExecuteScalar());
            
            if (userCount == 0)
            {
                DialogResult dialog = MessageBox.Show("当前用户表为空,无法完成登录,是否现在新增用户?", "数据库为空", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (dialog == DialogResult.Yes)
                {
                    // 主线程打开用户管理窗体,关闭当前登录窗体
                    this.Hide();
                    new User_Managment().ShowDialog();
                    this.Close();
                }
                else
                {
                    Application.Exit();
                }
            }
            // 有用户则继续执行原有登录逻辑
        }
    }
    catch (MySqlException ex)
    {
        MessageBox.Show(ex.Message, "数据库连接错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
        Application.Exit();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:39:03