直接呼叫 ADO 需處理大量 try-catch 異常、介面指標管理等瑣碎工作。作者將常用功能封裝成類別,雖技術含量不高但極具實用價值。因時間與水平限制,僅完成部分封裝且未全面測試,仍公開供參考。
ADO (ActiveX Data Objects) 是 Microsoft 提供的語言獨立、物件導向資料存取介面,特點:易用、多資料來源、高效能、適合 Web、豐富 API、低記憶體佔用。核心物件關係圖:

_ConnectionPtr pConn;
LPCSTR strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb";
HRESULT hr = pConn.CreateInstance("ADODB.Connection");
pConn->PutConnectionTimeout(5);
if (SUCCEEDED(hr)) {
pConn->Open(strConn, "", "", adConnectUnspecified);
}
常見連線字串:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdbProvider=SQLOLEDB.1;Data Source=server;Initial Catalog=db;User ID=sa;Password=pwd_RecordsetPtr pRs;
pRs.CreateInstance("ADODB.Recordset");
pRs->Open(_bstr_t("SELECT * FROM table"),
_variant_t((IDispatch*)pConn, true),
adOpenStatic, adLockOptimistic, adCmdText);
CursorTypeEnum)adOpenForwardOnly (0) 預設,僅向前,效能最佳adOpenKeyset (1) 可見他人更新,不可見新增/刪除adOpenDynamic (2) 完全動態,支援所有移動adOpenStatic (3) 靜態複本,適合報表LockTypeEnum)adLockReadOnly (1) 唯讀adLockPessimistic (2) 悲觀鎖定(編輯即鎖定)adLockOptimistic (3) 樂觀鎖定(Update 時才鎖定)adLockBatchOptimistic (4) 批次樂觀鎖定// 方式 1:Fields 集合
FieldsPtr pFields;
pRs->GetFields(&pFields);
_variant_t val = pFields->Item[L"COLUMN_NAME"]->Value;
// 方式 2:GetCollect(推薦)
_variant_t val = pRs->GetCollect("COLUMN_NAME");
get_ActualSize() // 實際寬度
get_Attributes() // 屬性旗標
get_DefinedSize() // 定義寬度(位元組)
get_Name() // 欄位名稱
get_Type() // 資料型別
get_Value() // 欄位值
掌握上述基礎後,即可著手撰寫應用程式。後續文章將展示完整封裝類別與實戰範例。