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

WinForm连接MySQL插入数据调用cmd.ExecuteNonQuery报SQL语法错误

问题现象

基于C#开发Windows Form应用向MySQL学生表写入数据时,执行cmd.ExecuteNonQuery方法抛出语法异常,具体错误信息如下:

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'angelina','biology')'' at line 1

报错根因
  • INSERT语句语法结构错误:标准INSERT语法为INSERT INTO 表名 (字段1,字段2) VALUES (值1,值2),原代码将参数占位符@name、@major写在了本应填写数据表字段名的位置,同时又通过字符串拼接把文本框输入值直接拼入SQL,最终生成的SQL结构完全不符合MySQL语法规则。
  • CommandType配置错误:原代码执行的是普通INSERT文本语句,并非存储过程,却设置cmd.CommandType = CommandType.StoredProcedure,会导致MySQL驱动将传入的SQL字符串当作存储过程名称解析,进一步触发语法解析异常。
  • 参数使用逻辑矛盾:原代码同时使用字符串拼接输入值、参数对象传值两种逻辑,既没有实现参数化查询防注入、自动转义特殊字符的作用,还会因为拼接逻辑额外引入多余的单引号,和报错信息里末尾出现的多余'完全对应。
修复方案
  • 修正INSERT语句结构:表名后括号内填写学生表对应的真实字段名,VALUES后直接保留参数占位符,删除所有字符串拼接输入内容的逻辑。
  • 修正CommandType配置:将类型改为CommandType.Text(普通SQL语句的默认类型,也可直接省略该行配置)。
  • 规范资源释放:使用using块包裹数据库连接、命令对象,无需手动调用Close()方法,即使执行过程抛出异常也能自动释放数据库连接,避免连接泄漏。

修复后的完整实现代码如下:

private void button2_Click(object sender, EventArgs e)
{
    // 替换为自己实际环境的数据库连接配置
    string conStr = @"server=localhost;database=替换为你的实际数据库名;uid=root;pwd=替换为你的数据库密码;";
    // 注意:table_student后括号内请替换为你自己学生表中存储姓名、专业的真实字段名
    string query = "INSERT INTO table_student (s_name, s_major) VALUES (@name, @major)";
    
    using (MySqlConnection con = new MySqlConnection(conStr))
    using (MySqlCommand cmd = new MySqlCommand(query, con))
    {
        cmd.CommandType = CommandType.Text;
        // 参数传值,无需额外拼接字符串
        cmd.Parameters.Add("@name", MySqlDbType.VarChar).Value = this.textBox3.Text.Trim();
        cmd.Parameters.Add("@major", MySqlDbType.VarChar).Value = this.textBox4.Text.Trim();
        
        con.Open();
        int i = cmd.ExecuteNonQuery();
        
        if (i > 0)
        {
            MessageBox.Show(i + "条数据保存成功");
        }
    }
}

提示:修复后的写法为标准参数化查询,会自动处理输入内容中的特殊字符转义,同时规避SQL注入风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:48:34