理解 Visual C++ Extensions for ADO

2016-01-29 12:44 2 1 收藏

理解 Visual C++ Extensions for ADO,理解 Visual C++ Extensions for ADO

【 tulaoshi.com - 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)



来源:https://www.tulaoshi.com/n/20160129/1487383.html

延伸阅读
  介绍  曾经碰到过让你迷惑不解、类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复杂的C/C++声明。   我们将从天天都能碰到的较简单的声明入手,然后逐步加入const修饰符和typedef,还有函数指针,最后介绍一个能够让你准确地理解任何C/C++声明的“右左法则”。 ...
信使服务是Windows 2000/XP下面的一种通信服务,通过它我们可以在网上象QQ一样进行实时的交流,但和QQ不同的是信使服务不需要拥有一个号码,它只要知道对方的IP地址--如果在局域网中,只要知道对方的计算机名就可以了。我们可以利用"net send"在命令行下面发送消息,也可以通过"控制面板-管理工具-计算机管理"中的"操作"菜单里面的"所有任...
一、背景 FlashGet的透明效果大家羡慕吧。传统的Windows应用程序想实现半透明效果,一般来说需要处理自己的窗口的WM_Paint消息窗口,很麻烦.现在好了,SetLayeredWindowAttributes是windows的新api,win2000以上才支持,它能使使窗体拥有透明效果.我在Google搜了下,介绍SetLayeredWindowAttributes的文章大多是delphi的和vb的。好不容易找...
标准(窗口)消息:窗口消息一般与窗口内部运作有关,如创建窗口,绘制窗口,销毁窗口,通常,消息是从系统发到窗口,或从窗口发到系统。发送函数SendMessage()或者PostMessage()。除WM_COMMAND之外,所有的以WM_开头的消息。从CWnd派生的类,都可以接受到这类消息。注意:标准消息并不需要我们指定处理函数名称,是默认的对应关系。 宏名称 对...
利用利用CPUID 汇编指令(机器码:0FH A2H, 如果你的编译器不支持CPUID 指令,只有emit 机器码了), 该指令可以被如下CPU识别: Intel 486 以上的CPU, Cyrix M1 以上的CPU, AMD Am486 以上的CPU (1) 取CPU OEM 字符串, 判断CPU 厂商 先让EAX=0, 再调用CPUID Inel的CPU将返回: EBX:756E6547H 'Genu&...

经验教程

860

收藏

92
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部