理解 Visual C++ Extensions for ADO(轉)

heying1229發表於2007-07-28
當我們使用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)
[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10172717/viewspace-928880/,如需轉載,請註明出處,否則將追究法律責任。

相關文章