找不到 MySql.Data.MySqlClient.MySqlException 插入查询错误

Posted

技术标签:

【中文标题】找不到 MySql.Data.MySqlClient.MySqlException 插入查询错误【英文标题】:Can't find MySql.Data.MySqlClient.MySqlException insert query error 【发布时间】:2021-06-26 02:59:52 【问题描述】:

这是错误信息

mysql.Data.MySqlClient.MySqlException: '你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在第 1 行的 '''')' 附近使用的正确语法

这是我的查询

MySqlCommand cmd = new MySqlCommand("insert into subject(id, code, title, unit) values('" + textBox1.Text + "',''" + textBox2.Text + "',''" + textBox3.Text + "',''" + textBox4.Text + "')", conn);

我已经查看了一个多小时了,我仍然得到这个错误。

【问题讨论】:

我看到你有很多不匹配的单引号。帮自己一个忙,使用参数而不是连接字符串。编写代码更容易,不会让眼睛疲劳计数引号字符,而且它也是一种更安全的方法来防止 SQL 注入漏洞。 您是否检查了执行此行后形成的结果查询是否正确?因为我可以在这里看到+ " ',' ' " +,所以您提供的查询中的单引号不匹配。 嗨@Vince Garcia,建议使用Paramaterized Query,因为这将简化在查询中添加值并防止SQL Injection 【参考方案1】:

建议使用Parameterized Query。

更新:根据@CodeCaster 对Stop Using AddWithValue() 文章中提到的问题的建议,我将所有AddWithValue() 切换为Add("@Parameter", SqlDbType).Value

MySqlCommand cmd = new MySqlCommand("insert into subject(id, code, title, unit) values(@ID, @Code, @Title, @Unit)", conn);
cmd.Parameters.Add("@ID", SqlDbType.int).Value = textBox1.Text;
cmd.Parameters.Add("@Code", SqlDbType.Varchar, 10).Value = textBox2.Text;
cmd.Parameters.Add("@Title", SqlDbType.NVarchar, 50).Value = textBox3.Text;
cmd.Parameters.Add("@Unit", SqlDbType.Varchar).Value = textBox4.Text;

还要确保您通过SqlDbType 传递的值必须与相应数据库表列的数据类型匹配

使用参数化查询的原因是:

    它简化了传递参数的查询,并使查询变得更具可读性。 阻止SQL Injection。

参考:Prepare MySQL Statement

【讨论】:

以上是关于找不到 MySql.Data.MySqlClient.MySqlException 插入查询错误的主要内容,如果未能解决你的问题,请参考以下文章

java为啥每次都是找不到文件。找不到文件?

java 枚举 找不到符号

bat系统找不到指定文件怎么办?

java package找不到符号

SpringBoot报找不到 dao 问题

ubuntu20.04找不到start命令