熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> C編程 >> 正文

理解 Visual C++ Extensions for ADO

2022-06-13   來源: C編程 
  當我們使用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
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.