【问题标题】:OleDbException syntax error in INSERT INTO statementINSERT INTO 语句中的 OleDbException 语法错误
【发布时间】:2018-03-25 16:36:58
【问题描述】:

我正在使用 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 数据库引擎。

【问题讨论】:

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


    【解决方案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

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

    【讨论】:

    • 这似乎是正确的答案,现在就应用修复
    • @Keddy1201,很高兴它有帮助。感谢回答接受/投票,谢谢。
    • 完成了,这是正确的答案,让我疯狂了好几个小时。希望这个答案也能帮助其他人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多