MFC 提供兩套資料庫類別:歷史悠久的 ODBC 類別(CDatabase、CRecordset)與功能更強的 DAO 類別(CDaoDatabase、CDaoRecordset)。本文從架構封裝層次、可攜性、效能、記錄集模型、適用資料源等維度深度比較,指導 C++ 開發者根據專案需求正確選型。
核心架構差異
- ODBC 類別:薄封裝 ODBC API,支援所有 ODBC 驅動程式的資料源(SQL Server、Oracle、MySQL 等),跨平台可攜性最佳(Intel/UNIX/Alpha)。
- DAO 類別:封裝 DAO 引擎(原為 Access/VB 專用),功能更豐富(資料表建立、關聯、查詢定義等),但主要針對 Microsoft Jet/ACE 引擎,對外部 ODBC 資料源支援有限。
記錄集模型統一
兩套類別採用相同記錄集模型(快照、動態集、順向),熟悉其中一套即可快速上手另一套。MFC 4.2 大幅強化 ODBC 類別效能,使其成為跨資料庫專案首選。
選型決策樹
- 需支援非 Microsoft 資料庫或跨平台 → ODBC。
- 專案純 Access/MDE、需豐富 DDL/DML 物件操作 → DAO。
- 既有 ODBC 程式碼基礎 → 繼續使用 ODBC,避免重寫成本。
- 新專案針對 SQL Server → 推薦 ODBC 或更現代的 OLE DB Consumer Templates / ADO。
MFC 資料庫類別本質是對底層 API 的薄封裝,理解其對應關係有助於除錯與效能調校。