sql - “Syntax error in INSERT INTO statement”错误-什么是错误?

标签 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

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

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

最佳答案

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

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

最好将所有名称括起来,以免意外使用保留字
sql = "INSERT INTO [Sense_Translation] ([SenseFK], [LanguageCode], [Translation]) VALUES (?, ?, ?)"

关于sql - “Syntax error in INSERT INTO statement”错误-什么是错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59157108/

相关文章:

Mysql多对多表查询

使用 MySQL 的 PHP 很慢

vb.net - sqlbulkcopy - 不允许 DBNull.Value。?

VB.Net 控制台应用程序返回 SHA512 哈希值

mysql - 连接两个表并显示发票号码总金额的 SQL 查询

sql - 将多行数据聚合成单行

asp.net Session 提前过期

vb.net - ManualResetEvent.WaitOne(1) 等待超过 1 毫秒?

excel - 使用 VBA 在 Access 中创建多个链接表

sql - 每个 ID 的 Microsoft Access 计数唯一值