首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

ADO 封裝類資料庫開發實戰(第一版·上)

     編輯:關於VC++

前言:為何要封裝 ADO?

直接呼叫 ADO 需處理大量 try-catch 異常、介面指標管理等瑣碎工作。作者將常用功能封裝成類別,雖技術含量不高但極具實用價值。因時間與水平限制,僅完成部分封裝且未全面測試,仍公開供參考。

ADO 物件模型速覽

ADO (ActiveX Data Objects) 是 Microsoft 提供的語言獨立、物件導向資料存取介面,特點:易用、多資料來源、高效能、適合 Web、豐富 API、低記憶體佔用。核心物件關係圖:

  • Connection:資料庫連線,可直接執行 SQL。
  • Recordset:資料游標集合,需關聯 Connection,支援多種游標/鎖定類型。
  • Command:進階指令(預存程序、參數化查詢)。
  • Fields/Field:欄位集合與單一欄位,可取得名稱、型別、大小、值。
  • Parameters/Parameter:Command 參數集合。
  • Errors/Error:Connection 錯誤集合。

ADO 物件關係圖

建立 Connection 連線

_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);
}

常見連線字串:

  • Access:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb
  • SQL Server:Provider=SQLOLEDB.1;Data Source=server;Initial Catalog=db;User ID=sa;Password=pwd

操作 Recordset 記錄集

_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");

Field 物件常用屬性

get_ActualSize()   // 實際寬度
get_Attributes()   // 屬性旗標
get_DefinedSize()  // 定義寬度(位元組)
get_Name()         // 欄位名稱
get_Type()         // 資料型別
get_Value()        // 欄位值

下一步

掌握上述基礎後,即可著手撰寫應用程式。後續文章將展示完整封裝類別與實戰範例。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved