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

时间:2019-12-03 12:26:07

标签: sql vb.net ms-access syntax-error sql-insert

我不确定该错误的来源。

我正在使用VB.NET将数据插入MS Access2016。我能够执行其他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

在SQL语句和SQL Server中,我已经检查并再次检查Access和VB.NET中的表名是否匹配,参数是否匹配以及参数是否与Access表相对应的正确顺序。 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语句之间没有区别,除了参数的数量无关紧要。

我在这里错过了一些自欺欺人的事情吗,还是这个问题可能更加阴险?

2 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:1)

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

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

括起来