2017-10-13 319 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