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

MySQL连接成功后报错:C#登录代码异常排查

问题排查与解决方案

核心错误原因

代码中SQL查询的字段名与实际数据库表字段不匹配:

  • 代码里用了name和exact_password,但实际core_members表的字段是member_name和member_password,这会导致SQL执行出错,触发异常。

其他潜在问题

  • 使用字符串拼接SQL语句,存在严重的SQL注入风险,同时如果用户输入包含单引号等特殊字符,会直接导致SQL语法错误。
  • 调用cmd.ExecuteNonQuery()执行SELECT语句:该方法仅适用于增删改操作,执行SELECT会返回-1,且完全多余,DataAdapter的Fill方法会自动执行查询命令。
  • 异常处理仅显示通用提示,无法获取具体错误信息,不利于排查问题。
  • 数据库连接未使用using语句管理,可能导致连接资源无法及时释放。

修正后的完整代码

using MySql.Data.MySqlClient;
using System.Data;
using System.Windows.Forms;

// 登录按钮点击事件方法内的代码
string server = "s570.use8.mysecurecloudhost.com";
string database = "nextgene_NGH";
string uid = "nextgene_NGH";
string password = "EXAMPLE PASSWORD";
string ssl = "None";
string connectionString = $"SERVER={server};DATABASE={database};UID={uid};PASSWORD={password};SSL Mode={ssl}";

try
{
    // 使用using自动释放连接资源
    using (MySqlConnection connection = new MySqlConnection(connectionString))
    {
        connection.Open();
        MessageBox.Show("Connection Successful!");

        // 参数化查询,避免SQL注入和语法错误
        string sql = "SELECT * FROM `core_members` WHERE member_name = @username AND member_password = @password";
        using (MySqlCommand cmd = new MySqlCommand(sql, connection))
        {
            // 添加参数
            cmd.Parameters.AddWithValue("@username", maskedTextBox1.Text);
            cmd.Parameters.AddWithValue("@password", maskedTextBox2.Text);

            DataTable dt = new DataTable();
            using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))
            {
                da.Fill(dt);
            }

            if (dt.Rows.Count == 0)
            {
                MessageBox.Show("Login Failed.");
                //button2.Visible = true;
            }
            else
            {
                MessageBox.Show("Login Successful.");
            }
        }
    }
}
catch (Exception ex)
{
    // 显示具体异常信息,方便排查
    MessageBox.Show($"Error: {ex.Message}\n{ex.StackTrace}");
}

关键修正点说明

  1. 修正字段名:将SQL中的name改为member_name,exact_password改为member_password,匹配实际表结构。
  2. 参数化查询:用@username和@password作为参数占位符,通过Parameters.AddWithValue传入用户输入,彻底避免SQL注入,同时解决特殊字符导致的语法错误。
  3. 移除多余的ExecuteNonQuery:DataAdapter的Fill方法会自动执行查询,无需提前调用ExecuteNonQuery。
  4. 使用using语句:确保连接、命令、适配器等资源在使用后自动释放,避免资源泄漏。
  5. 完善异常提示:显示具体的错误信息和堆栈跟踪,便于快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:23:09