我不确定该错误的来源。
我正在使用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语句之间没有区别,除了参数的数量无关紧要。
我在这里错过了一些自欺欺人的事情吗,还是这个问题可能更加阴险?
答案 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]