近期在使用 ADO 連接 Access 數據庫時遇到一個詭異錯誤,經排查記錄如下,供參考。
// 伪代碼示例
_ConnectionPtr pConn;
_RecordsetPtr pRs;
pConn.CreateInstance(__uuidof(Connection));
pConn->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb", "", "", adModeUnknown);
pRs = pConn->Execute("SELECT * FROM Users", NULL, adCmdText);
// 業務邏輯中調用
CString strSql = "INSERT INTO Users(Name) VALUES('Test')";
pConn->Execute(_bstr_t(strSql), NULL, adCmdText);
0x80040E14(語法錯誤)或 0x80004005(未指定錯誤)Name、Date、Key 等視為保留字,需用方括號包裹:[Name]。Command + Parameter。Microsoft.ACE.OLEDB.12.0;舊版 .mdb 用 Microsoft.Jet.OLEDB.4.0。ADO 操作 Access 時,保留字轉義與提供者版本匹配是兩大高頻坑點。建議統一使用參數化命令,並根據文件後綴動態選擇 Provider。