2017-10-13 322 views
1

我使用OleDbCommandBuilderOleDbException的语法错误的语句

adapter.InsertCommand = builder.GetInsertCommand(); 

建立一个SQL INSERT命令,我得到一个异常,而试图将数据添加到数据库上这一行:

adapter.Update(ds, tableName); 

和例外:

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

我设置一个断点在这条线上,结果发现,插入命令的语法是正确的:

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

而且参数是否正确,以及:为0x1,0x2,则13/10/2017,null

为什么当语法显然正确并且参数正确时,我会得到语法错误异常?

异常的源代码说Microsoft Access数据库引擎。

回答

1

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

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

总的原则是要尽量避免使用命名任何这些字的表/列。但是,如果您绝对需要,则可以使用列名称周围的[]符号来转义它。

+0

这似乎是正确的答案,现在应用修复程序 – Keddy1201

+0

@ Keddy1201,很高兴它有帮助。希望答案接受/投票,谢谢。 – andrews

+0

完成,这是正确的答案,并使我疯狂了几个小时。希望这个答案也能帮助其他人。 – Keddy1201