理解 Visual C++ Extensions for ADO(轉)
當我們使用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@]
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在Visual C++中利用UDL檔案建ADO連線(轉)C++
- 在Visual C++中用ADO進行資料庫程式設計 (轉)C++資料庫程式設計
- Visual C++ ADO資料庫程式設計入門C++資料庫程式設計
- c++ builder中的ado使用 (轉)C++UI
- Visual C++應用框架揭密 (轉)C++框架
- 在Visual Basic 中使用C++ 類 (轉)C++
- Visual C++/MFC指南(1):幕後 (轉)C++
- Visual C++中的圖形特技 (轉)C++
- 擴 展Visual c++ MFC 類 庫 (轉)C++
- Visual C++ 6.0 編 程 經 驗 (轉)C++
- Visual C++ 6.0的文件/視結構 (轉)C++
- Visual C++實現檔案間批次轉換功能 (轉)C++
- 在Visual C++中使用內聯彙編 (轉)C++
- 在Visual C++中使用內聯彙編(轉)C++
- Visual C++中函式呼叫方式淺探 (轉)C++函式
- Visual C++與Delphi/C++Builder之比較 (轉)C++UI
- 情有獨鍾C++:Visual C++ .NET編譯器的新特性(轉)C++編譯
- Visual C++/MFC 指南(4):MFC 簡要指點 (轉)C++
- 在 Visual C++ 中 建 立 MFC 擴 展 DLL (轉)C++
- An interview with Microsoft's new Visual C++ Architect Stanley Lippman (轉)ViewROSC++
- Visual C++ 6.0程式設計實現列印功能(轉)C++程式設計
- 用Visual C++編寫電子郵件程式 (轉)C++
- 學習C++(一) 我現在理解的C++ (轉)C++
- 手摸手帶你玩轉Xcode ExtensionsXCode
- Answers to your MFC/ATL questions from the Visual C++ .NET Product Manager (轉)C++
- Visual C++ 讀寫 MySQLC++MySql
- 開發工具大比拚之Visual C++ vs. Delphi(一) (轉)C++
- 開發工具大比拚之Visual C++ vs. Delphi(二) (轉)C++
- 用Visual C++實現圖象漸顯和漸隱 (轉)C++
- Visual Studio C++ Project 配置C++Project
- Visual C++/MFC入門教程C++
- Dynamics365 Developer Extensions提升你的開發效率(支援visual studio 2017)S3Developer
- ADO程式設計應用 (轉)程式設計
- 在Visual C++中使用fopen()函式來讀寫檔案 (轉)C++函式
- C++箴言:理解typename的兩個含義(轉)C++箴言
- 理解C++ 巨集C++
- 理解C++ staticC++
- ADO2.1中Bookmark 屬性 (轉)