INSERT INTO 语句中的 OleDbException 语法错误

OleDbException syntax error in INSERT INTO statement

我正在使用 OleDbCommandBuilder

构建 SQL INSERT 命令
adapter.InsertCommand = builder.GetInsertCommand();

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

adapter.Update(ds, tableName);

和异常:

System.Data.OleDb.OleDbException: 'Syntax error in INSERT INTO statement.'

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

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

并且参数也正确:0x1、0x2、13/10/2017、null

为什么我的语法明明是正确的,参数也正确,却出现语法错误异常?

异常来源为 Microsoft Access 数据库引擎。

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

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

一般规则是尽量避免使用这些词来命名 tables/columns。但是,如果您绝对需要,可以在列名周围使用 [] 符号来转义它。