Sql &引用;INSERT INTO语句中的语法错误;错误-错误是什么?
我不确定这个错误是从哪里来的 我正在使用VB.NET将数据插入MS Access 2016。我可以执行其他SQL查询,没有问题,但是这个查询在INSERT INTO语句中返回Sql &引用;INSERT INTO语句中的语法错误;错误-错误是什么?,sql,vb.net,ms-access,syntax-error,sql-insert,Sql,Vb.net,Ms Access,Syntax Error,Sql Insert,我不确定这个错误是从哪里来的 我正在使用VB.NET将数据插入MS Access 2016。我可以执行其他SQL查询,没有问题,但是这个查询在INSERT INTO语句中返回语法错误错误: sql = "INSERT INTO Sense_Translation (SenseFK, LanguageCode, Translation) VALUES (?, ?, ?)" cmd = New OleDbCommand(sql, myConnection) cmd.Parameters.Add(N
语法错误
错误:
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中的表名是否匹配,参数是否匹配,以及SQL语句和参数中的参数是否符合Access表对应的正确顺序。添加语句(我甚至不确定后者是否重要,我只是以防万一。)
我还检查了传递给参数的类型是否匹配-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保留字。因此,您需要将其括起来:
sql = "INSERT INTO Sense_Translation (SenseFK, LanguageCode, [Translation]) VALUES (?, ?, ?)"
最好总是将所有名称括起来,以避免意外使用保留字
sql = "INSERT INTO [Sense_Translation] ([SenseFK], [LanguageCode], [Translation]) VALUES (?, ?, ?)"
在sql控制台中运行这两条语句。语法错误不能显示整个sql错误,但有时可能是由于sql本身而不是用高级语言编写的。始终先在sql控制台中检查查询,然后在sql情况下在高级语言级别进行检查
由于@ErikA已经发布了翻译
是一个Sql保留关键字,因此,在Sql控制台中运行相同的Sql应该会给出确切的保留关键字错误。重命名此列或用[Translation]
括起来您是否尝试手动运行这些语句?做一件事复制相同的语句,并在Sql First中使用手动值运行这两个语句谢谢@Erik A的回答解决了我的主要问题,但如果错误来源不明,我将在将来采取这一步骤:)