從簡單的 Jet Engine 到大型 Oracle 系統,VC++ 6.0 提供多種資料庫程式介面。本文對比五種主流技術:
提供通用程式介面,支援 Oracle、SQL Server、Excel 等多種資料庫,可直接用 SQL 陳述式進行底層操作。需引入 sql.h、sqlext.h、sqltypes.h。
基本步驟:
SQLHENV 控制代碼)SQLAllocHandle)SQLConnect,可先用 SQLSetConnectAttr 設定屬性)特點:功能強大豐富(非同步操作、交易處理),但程式複雜、工作量大。
MFC 1.5+ 封裝 ODBC 功能,免去繁雜 API 呼叫。主要類別:
OpenEx() 開啟,配合 CRecordset 操作。交易處理時關鍵(BeginTrans/CommitTrans/Rollback)。snapshot(靜態檢視)與 dynaset(與其他使用者更新同步)。支援記錄的新增、刪除、修改、查詢。CRecordset,從對話方塊模板建立,利用 DDX/RFX 機制自動化控制項與欄位資料移動,甚至無需寫代碼即可實現簡單查看程式。m_nRetCode (ODBC 回傳碼)、m_strError (錯誤描述)、m_strStateNativeOrigin (ODBC 錯誤碼描述)。所有資料庫操作函式皆可拋出此異常,捕捉異常是正確做法。實際開發中應用最廣,功能豐富且操作相對簡便。
DAO(Data Access Objects)用於介接 Microsoft Access。若僅需與 Access 介接,DAO 較方便。主要類別對應 ODBC 版:CDaoWorkspace、CDaoDatabase、CDaoRecordset、CDaoRecordView、CDaoException,另加 CDaoTableDef(資料表定義)、CDaoQueryDef(查詢定義)、CDaoFieldExchange(DFX 機制)。同樣支援交易處理。應用範圍固定於 Access。
在資料提供者與消費者間提供靈活的 COM 介面,但靈活有時增加複雜度。定義三大基本角色:
程式設計使用 COM 元件:列舉器、資料來源、工作階段、交易、命令、錯誤物件等。操作相對複雜。
微軟提供的面向物件介面,基於 OLE DB 但更簡單,擁有更豐富特性與更高靈活性。基於 COM,支援 VB、VJ++ 等多種開發工具,在伺服器應用(特別是 ASP)極具優勢。
ADO 物件結構類似 OLE DB 但不依賴物件層級,多數情況只需建立並使用所需物件。核心物件:
Connection:資料庫連線、命令與交易處理Command:傳送給資料來源的命令Recordset:資料表格集,取得與修改資料Field:記錄集欄位資訊Parameter:命令參數雙向傳輸資料Property:操作其他物件屬性Error:詳細錯誤資訊VC++ 使用 ADO 需進行 COM 操作(此處不贅述)。
在當今分散式開發環境下,VC++ 6.0 資料庫開發優勢明顯。學會在不同場合選用不同技術,是開發人員必備技能: