OLE DB 建立在 COM 介面之上,提供高效、統一的資料存取方式,成為眾多商業軟體的首選。筆者曾參與大型互動電視系統「股票點播」模組開發,面對百 MB 級資料庫與高頻寫入場景,總結出以下實戰經驗供參考。
初期使用 Access 2000 格式,插入 ATL OLE DB Jet 4.0 卻失敗。經排查發現,ATL 精靈生成的頭文件中 OpenDataSource() 函數包含一行:
dbinit.AddProperty(DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO, false);
刪除該行後程式即可正常運行。該屬性意為「堅持使用加密形式的敏感認證資訊」,但設為 true/false 均無效,僅刪除有效,疑為 ATL 模板庫缺陷。
使用 Jet 3.5.1 引擎時,ATL 生成的資料庫頭文件用久會導致操作錯誤。重新執行 ATL 精靈生成頭文件即可恢復。ADO 或底層 COM 介面無此問題,同樣疑為 ATL Bug,大量資料頻繁寫入場景下較易觸發。
ATL 未提供專用函數,需利用 MovePrev/MoveNext 回傳值判斷:
HRESULT hr = Info.MoveFirst();
while (hr == S_OK) {
// 處理記錄
hr = Info.MoveNext();
}
回傳 S_OK 表示未到達邊界,否則已到首/尾。
因修改可能影響 OLE 註冊資訊,ATL 機制要求完整重建以更新所有元數據,否則程式可能異常。
Access 字元欄位限制 255 字元,需改用「備註」型別。ATL 綁定變數預設 TCHAR m_FileName[1024],可自行擴大如 [10000],但需謹慎評估記憶體開銷。注意:Debug 版變數字元數超過 255 可能顯示異常,Release 版正常。
本文僅拋磚引玉,歡迎同好交流。VC6 內建 ATL 3.0 仍有缺陷,期待後續版本改進。技術交流信箱:Highersoft@yeah.Net