Lou*_*Lou 0 sql vb.net ms-access syntax-error sql-insert
我不确定这个错误可能来自哪里。
我正在使用 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
Run Code Online (Sandbox Code Playgroud)
我已经检查并仔细检查了 Access 和 VB.NET 中的表名是否匹配,参数是否匹配,以及参数在 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
Run Code Online (Sandbox Code Playgroud)
据我所知,除了参数数量外,这两个 SQL 语句之间没有区别,这无关紧要。
我在这里错过了一些明显的问题,还是问题可能更阴险?
Translation
是一个 SQL 保留字,如在此处找到的。因此,您需要将其括起来:
sql = "INSERT INTO Sense_Translation (SenseFK, LanguageCode, [Translation]) VALUES (?, ?, ?)"
Run Code Online (Sandbox Code Playgroud)
始终将所有名称括起来是一种很好的做法,以避免意外使用保留字
sql = "INSERT INTO [Sense_Translation] ([SenseFK], [LanguageCode], [Translation]) VALUES (?, ?, ?)"
Run Code Online (Sandbox Code Playgroud)