當我們使用Visual C++進行ADO編程時
一項頗為頭疼的工作就是對VARIANT字段類型的處理
通常做法是
先把VARIANT類型轉換為形式上較為類似的C++類型
然後再把轉換後的數據存放在一個類(class)或結構(structure)中
即便如此
對VARIANT數據類型的處理在一定程度上也影響到了程序的性能
ADO為我們提供了一個接口
該接口使我們可以把數據直接讀取到本地
從而繞開對於復雜的VARIANT數據類型的處理
同時
ADO還定義了一組預處理宏
用來簡化接口的使用
用好這一工具
將會使我們的編程工作將變得輕松和高效
一般情況下
我們從ADO獲得Recordset數據集
然後定義一個C/C++結構類型
再把Recordset中的記錄綁定到結構成員變量中
當遇到VARIANT類型時
情況變得復雜
你必須解決如何把VARIANT數據類型(數據庫)轉換到C/C++數據類型(本地)的問題
Visual C++ Extensions for ADO(為敘述方便
以下簡稱ADOExt)的目標就是使這一切變得簡單
【
IADORecordBinding 接口簡介】
ADOExt 把RecordSet記錄集中的字段綁定到C/C++變量中
一旦該Recordset當前行的數據發生改變
數據將被立即拷貝到綁定的C/C++變量中
根據需要
數據將被轉換到指定的C/C++數據類型
IADORecordBinding 接口的 BindToRecordset 成員方法用來實現數據庫字段到本地C/C++變量之間的綁定
如果要為Recordset新增一條記錄
可以使用AddNew方法
Update方法則用來把綁定的C/C++變量數據更新和升級到數據庫中
IADORecordBinding 接口的實現不用我們操心
Recordset對象悄悄的在幕後完成這一切
【
綁定單元(Binding Entries)簡介】
ADOExt 把Recordset對象的字段類型映射到本地的C/C++變量中
我們把這種從一個數據庫字段映射到一個C/C++變量之間的過程定義稱為一個綁定單元(Binding Entries)
綁定由宏來完成
可以綁定的類型包括數值型
定長
以及可變長度的數據
綁定的基本流程是
定義派生自CADORecordBinding(CADORecordBinding 類本身其實也是一組宏定義)的類
在類中使用特定的宏來實現數據綁定
然後
在類中聲明相應的C/C++變量
ADO 在內部把宏定義中的參數映射到一個OLE DB DBBINDING類型的結構中
並且創建一個OLE DB 存取對象用來管理字段和變量之間的數據移動和格式轉換
OLE DB 的數據定義包括三個部分
一個用來儲存數據的緩沖區
一個用來標示數據存取狀態
以及變量如何提取的狀態位
以及數據的長度
【
頭文件包含】
要使用 Visual C++ 的ADOExt
你需要在應用程序中包含下列頭文件
#include
【綁定Recordset 字段的過程】
■創建一個派生自CADORecordsetBinding的類
■在派生類中設定綁定單元並定義相應的C/C++變量這些綁定單元被界定在 BEGIN_ADO_BINDING 和 END_ADO_BINDING 之間不要想當然的在宏定義間放置逗號或者分號這些工作會由宏在內部自動實現
■為每一個要映射為C/C++變量的數據庫字段指定一個綁定單元根據需要從ADO_FIXED_LENGTH_ENTRY ADO_NUMERIC_ENTRY 或者 ADO_VARIABLE_LENGTH_ENTRY 這三個宏定義中選擇一個並填寫上正確的參數
■在你的引用程序中創建一個該類的實例從 Recordset 中獲取 IADORecordBinding 接口然後調用BindToRecordset方法實現數據綁定
【接口方法定義】
IADORecordBinding 接口有三個方法BindToRecordset AddNew 以及 Update這些方法有且只有一個指針類型的參數該參數指向一個派生自CADORecordBinding的類實例事實上AddNew 和 Updage 方法 將分別調用 ADO 中的同名方法
語法
BindToRecordset 方法實現 Recordset 字段到 C/C++ 變量之間的綁定
BindToRecordset(CADORecordBinding *binding)
AddNew 方法調用它的同名方法ADO 中的 AddNew 方法向 Recordset 中增加一條新的記錄
AddNew(CADORecordBinding *binding)
Update 方法調用它在ADO中的同名方法 Update 完成對Recordset的數據更新
Update(CADORecordBinding *binding)
From:http://tw.wingwit.com/Article/program/c/201401/30254.html