INSERT INTO语句中的OleDbException语法错误

时间:2017-10-13 13:58:15

标签: sql ms-access oledb oledbcommand reserved-words

我正在使用OleDbCommandBuilder构建SQL INSERT命令

adapter.InsertCommand = builder.GetInsertCommand();

我尝试在此行上向数据库添加数据时遇到异常:

adapter.Update(ds, tableName);

和例外:

  

System.Data.OleDb.OleDbException:'INSERT INTO中的语法错误   语句'。

我在这一行设置了一个断点,发现insert命令的语法是正确的:

INSERT INTO order (orderid, employeeid, dateestimated, datearrived) VALUES (?, ?, ?, ?)

参数也是正确的:0x1,0x2,13 / 10/2017,null

为什么在语法明确正确且参数正确的时候我会收到语法错误异常?

该异常的消息来源称为Microsoft Access数据库引擎。

1 个答案:

答案 0 :(得分:1)

您已拨打表order。这是保留的MS-Access / SQL关键字。尝试将您的表重命名为orders或其他名称。或者,如果您可以控制生成的SQL语句,请尝试添加[...]使其成为[order]

您可以在此处找到MS-Access保留关键字的完整列表:https://support.office.com/en-us/article/Access-2007-reserved-words-and-symbols-E33EB3A9-8BAA-4335-9F57-DA237C63EABE

一般规则是尽量避免使用任何这些单词命名表/列。但是,如果您绝对需要,可以在列名称周围使用[]符号来逃避它。