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

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 语句之间没有区别,这无关紧要。

我在这里错过了一些明显的问题,还是问题可能更阴险?

Eri*_*k A 5

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)