理解 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 手摸手帶你玩轉Xcode ExtensionsXCode
- Dynamics365 Developer Extensions提升你的開發效率(支援visual studio 2017)S3Developer
- ADO與ADO.NET 的區別
- Use any C++ Compiler with Visual StudioC++Compile
- 徹底理解c++的隱式型別轉換C++型別
- VISUAL-STUDIO(2022)-透過Visual Studio Installer新增C++工作負載C++負載
- gevent安裝錯誤解決方案:Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools"ROSC++UI
- 使用 Visual C++ 的 Office 自動化C++
- visual studio原生支援C++的含義C++
- Visual Studio C++ 安裝以及使用教程C++
- A Security Analysis Of Browser Extensions
- Visual Studio部署C++環境下OpenCV庫C++OpenCV
- Visual C++ MFC 中常用巨集的含義C++
- ado.net 與lot
- ADO.NET 總結
- C++指標理解C++指標
- 利用Visual Studio除錯WSL下的C++工程除錯C++
- Microsoft Visual C++ 微軟常用執行庫合集ROSC++微軟
- JMX-Java Management ExtensionsJava
- swift擴充套件ExtensionsSwift套件
- Microsoft.Extensions.AI 初探ROSAI
- 簡述ADO.NET(一)
- Visual C++網路程式設計案例實戰pdfC++程式設計
- Visual C++ 6.0專案檔案型別簡介C++型別
- C++ const常量的理解C++
- 安裝Microsoft Visual C++ 2010 x64 Redistributable 報錯ROSC++Redis
- lib 安裝失敗,error Microsoft Visual C++ 14.0 is required.ErrorROSC++UI
- 呼叫Visual Studio的cl.exe編譯C/C++程式編譯C++
- Ado.NET基礎必備
- 【C++】C++之型別轉換C++型別
- SnapKit 原始碼解讀(一):ExtensionsAPK原始碼
- 精通Visual C++圖象程式設計------讀書筆記8C++程式設計筆記
- 精通Visual C++圖象程式設計---讀書筆記6.2C++程式設計筆記
- 精通Visual C++圖象程式設計---讀書筆記6.1C++程式設計筆記
- 精通Visual C++圖象程式設計---讀書筆記5C++程式設計筆記
- Visual C++ generate uuid via UuidCreate and CoCreateGuid,get time now,write string to fileC++GUI
- Visual Studio Code 配置C、C++ 檔案debug除錯環境C++除錯
- 【Visual Studio調教小記錄】C++指標靠前靠後??C++指標
- entity framework與ADO.NET 2.0效率Framework