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

C#连接MySQL报Connection Property must not be null异常咨询

错误根因

该异常的直接触发原因是你初始化MySqlCommand时,未给命令对象绑定有效的数据库连接,导致MySqlCommand.Connection属性为null,执行查询时就会抛出这个错误。
你当前代码中初始化Command的写法是var cmd = new MySqlCommand("SELECT _Password FROM * WHERE email=" + enter_email);,只传入了SQL语句,没有关联已经打开的connection对象,这是报错的核心原因。

除了直接触发报错的问题外,你的代码还有多处会导致运行异常的问题,需要同步修复:

  • SQL语法错误:FROM *是非法写法,FROM关键字后必须指定要查询的具体表名,不能直接使用通配符
  • 存在SQL注入与语法错误风险:直接拼接用户输入的邮箱内容到SQL语句中,一旦输入内容包含单引号等特殊字符就会导致SQL执行失败,同时存在被SQL注入攻击的风险,必须改用参数化查询
  • 数据读取逻辑错误:ExecuteReaderAsync返回的DataReader初始指针位于第一行记录之前,必须先调用Read()方法移动指针、判断是否存在匹配记录,才能读取字段值;你当前的逻辑没有处理邮箱不存在、查询无结果的场景,直接读取字段会触发新的异常
  • 资源释放不规范:MySqlCommand、MySqlDataReader都属于非托管资源,应该放入using块中自动释放,不需要手动调用connection.Close(),外层连接的using块会在代码执行结束后自动关闭并释放连接

修复后的参考代码如下:

async void LoginClick(object sender, EventArgs args)
{
    var connectionStr = "server=myip;user=app;database=travel_logger;port=3306;password=app;default command timeout=20;";
    string enter_email = Email.Text;
    using (var connection = new MySqlConnection(connectionStr))
    {
        await connection.OpenAsync();
        // 初始化Command时同时传入SQL语句和连接对象,修复Connection为null的问题
        // 注意将SQL语句中的user_table替换为你项目中实际存储用户账号的表名
        using (var cmd = new MySqlCommand("SELECT _Password FROM user_table WHERE email=@email", connection))
        {
            // 使用参数化查询,避免SQL注入和特殊字符导致的语法错误
            cmd.Parameters.AddWithValue("@email", enter_email);
            using (var reader = await cmd.ExecuteReaderAsync())
            {
                // 先判断是否查询到匹配的用户记录
                if (await reader.ReadAsync())
                {
                    string data_password = reader.GetString(0);
                    if (data_password == Password.Text)
                    {
                        await Navigation.PushAsync(new AboutPage());
                    }
                    else
                    {
                        await DisplayAlert("Login Error", "Incorrect email or password", "Okay");
                    }
                }
                else
                {
                    await DisplayAlert("Login Error", "Incorrect email or password", "Okay");
                }
            }
        }
    }
}

注意:生产环境禁止明文存储用户密码,上述代码仅做逻辑演示,正式上线前请替换为加盐哈希的密码校验逻辑,避免数据泄露。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:45:24