“INSERT INTO 语句中的语法错误”错误 - 错误是啥?

Posted

技术标签:

【中文标题】“INSERT INTO 语句中的语法错误”错误 - 错误是啥?【英文标题】:"Syntax error in INSERT INTO statement" error - What is the error?“INSERT INTO 语句中的语法错误”错误 - 错误是什么? 【发布时间】:2019-12-03 12:26:07 【问题描述】:

我不确定这个错误来自哪里。

我正在使用 VB.NET 将数据插入 MS Access 2016。我能够执行其他 SQL 查询没问题,但是这个返回 Syntax error in INSERT INTO statement 错误:

sql = "INSERT INTO Sense_Translation (SenseFK, LanguageCode, Translation) VALUES (?, ?, ?)"

cmd = New OleDbCommand(sql, myConnection)
cmd.Parameters.Add(New OleDbParameter("SenseFK", senseID))
cmd.Parameters.Add(New OleDbParameter("LanguageCode", lcodeID))
cmd.Parameters.Add(New OleDbParameter("Translation", tr.Translation))

Try
    cmd.ExecuteNonQuery()
    cmd.Dispose()
Catch ex As Exception
    MsgBox(ex.Message)
End Try

我已经检查并再次检查了 Access 和 VB.NET 中的表名是否匹配,参数是否匹配,以及参数是否与 Access 表对应的顺序正确,无论是在 SQL 语句中还是在Parameters.Add 声明(我什至不确定后者是否重要,我只是以防万一。)

我还检查了传递给参数的类型是否匹配 - senseID 是一个数字,lcodeID 是一个数字,tr.Translation 是一个字符串,与表格匹配。虽然如果是类型不匹配,我预计错误会有所不同。

只是为了比较,当我执行下面的代码时,这确实没有返回错误:

sql = "INSERT INTO Sense (EntryFK, SenseInformation) VALUES (?, ?)"
cmd = New OleDbCommand(sql, myConnection)

cmd.Parameters.Add(New OleDbParameter("EntryFK", entryID))
cmd.Parameters.Add(New OleDbParameter("SenseInformation", ss.SenseInformation))

Try
    cmd.ExecuteNonQuery()
    cmd.Dispose()
Catch ex As Exception
    MsgBox(ex.Message)
End Try

据我所知,这两个 SQL 语句之间没有区别,只是参数的数量无关紧要。

我在这里遗漏了什么不言自明的事情,还是问题可能更隐蔽?

【问题讨论】:

您是否尝试手动运行这些语句?做一件事复制相同的语句并首先在 Sql 中使用手动值运行这两个语句 【参考方案1】:

Translation 是一个 SQL 保留字,如 here。因此,您需要将其括起来:

sql = "INSERT INTO Sense_Translation (SenseFK, LanguageCode, [Translation]) VALUES (?, ?, ?)"

最好始终将所有名称括起来,以避免意外使用保留字

sql = "INSERT INTO [Sense_Translation] ([SenseFK], [LanguageCode], [Translation]) VALUES (?, ?, ?)"

【讨论】:

【参考方案2】:

在 sql 控制台中运行这两个语句。语法错误只是不能显示整个 sql 错误,但有时可能是由于 sql 本身而不是它用高级语言编写的方式。始终先在 sql 控制台中检查查询,然后在 sql 的情况下在高级语言级别检查。

@ErikA 已经发布了Translation 是一个 Sql 保留关键字,因此,在 sql 控制台中运行相同的 sql 应该会给出确切的保留关键字错误。重命名此列或用[Translation]括起来

【讨论】:

谢谢! @Erik A 的回答解决了我的主要问题,但如果错误的来源不清楚,我会在以后采取这一步:)

以上是关于“INSERT INTO 语句中的语法错误”错误 - 错误是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何解决“INSERT INTO 语句中的语法错误”

使用 DateTime 时 INSERT INTO 语句中的语法错误

asp.net 中的 INSERT INTO 语句中的语法错误

INSERT INTO 语句中的语法错误,没有给出其他详细信息

INSERT INTO 语句中的语法错误(将多条记录从 Gridview 插入到 Access)

将文本框值添加到单个记录:INSERT INTO 语句中的语法错误