其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

理解 Visual C++ Extensions for ADO


发布日期:2019年01月01日
 
理解 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)



上一篇:用Delphi语言来学设计模式之简单工厂篇

下一篇:Delphi CS笔试题