前言:在使用ADO和Visual C++进行数据库程序开发时,程序员会面临一项复杂的任务,那就是对VARIANT类型字段的处理。Visual C++ Extensions for ADO提供了IADORecordBinding接口,使用该接口程序员可以绕开VARIANT而直接把数据库的数据读取到本地的C/C++类型数据中。
ADO提供了IADORecordBinding接口,使用该接口程序员可以绕开VARIANT,而直接把数据库的数据读取到本地的C/C++类型数据中。同时,ADO还提供了一组宏定义,用来简化该接口的使用。
IADORecordBinding接口简介:IADORecordBinding是一个COM接口,每个COM接口都会提供一些可以调用的方法。IADORecorBinding提供了3个方法:BindToRecordset方法来实现数据库字段到本地C/C++变量之间的绑定;AddNew方法用来新增一条记录;Update方法用来更新数据库中的记录。利用IADORecordsetBinding接口把记录集字段绑定到对应的成员变量中后,一旦该记录集当前记录数据发生改变,数据将被立即复制到绑定的变量中。
Visual C++Extensions来实现ADO操作时需要在应用程序中包含 icrsint.h 头文件。该头文件包含了实现绑定的要素:
1.IADORecordBinding接口的说明
2.数据绑定宏的说明,数据绑定宏是用来声明绑定单元的一系列宏。
3.CADORecordBinding类的声明
接口方法的使用:
1.BindToRecordset(CADORecordBinding *binding),调用该方法绑定变量与字段。
2,AddNew(CADORecordBinding *binding),调用该方法可间接调用ADO的AddNew方法,向数据库的记录集中增加一条新的记录
3.Update(CADORecordBinding *binding),调用该方法可间接调用ADO的Update方法,完成对该记录集的数据更新。
数据绑定宏Binding Entry Macros
数据绑定宏是用来声明绑定单元的一系列宏,使用这些宏就能够定义记录集的字段和程序变量的映射关系。数据绑定宏的语法如下:
开始数据绑定语法如下:
BEGIN_ADO_BINDING(Class)
数值型数据的绑定宏语法如下:
ADO_NUMERIC_ENTRY(Ordinal,DataType,Buffer,Precision,Scal,Status,Modify)
ADO_NUMERIC_ENTRY2(Ordinal,DataType,Buffer,Precision.Scal,Modify);
定长型数据的绑定语法如下:
ADO_NUMERIC_ENTRY(Ordinal,DataType,Buffer,Status,Modif);
ADO_NUMERIC_ENTRY2(Ordinal,DataType,Buffer,Modif)
边长类型数据的绑定宏语法如下:
ADO_VARIABLE_LENGTH_ENTRY(Ordinal,DataType,Buffer,Size,Status,Length,Modify);
ADO_VARIABLE_LENGTH_ENTRY2(Ordinal,DataType,Buffer,Size,Status,Modify)
ADO_VARIABLE_LENGTH_ENTRY3(Ordinal,DataType,Buffer,Size,Length,Modify)
ADO_VARIABLE_LENGTH_ENTRY4(Ordinal,DataType,Buffer,Size,Modify)
使用Visual C++ Extension编程的一般步骤:
1。创建一个继承于CADORecordbinding的子类。并在子类中声明绑定宏语句,用来与数据库的某一个表中的字段值进行绑定。
2。声明智能指针。COM_SMARPTPTR_TYPEDEF (IADORecordBinding,__uuidof(IADORecordBindingPtr)),定义IADORecordBinding接口的智能指针类型:IADORecordBindingPtr。
3。实例化智能指针IADORecordBinding picRs(pRs)其中pRs为_RecordsetPtr对象。
4。绑定到数据库利用接口提供的方法BindToRecordset(CADORecordBinding *binding)实现记录集字段与变量的绑定:picRs->BindToRecordset(&m_baseInfo).其中m_baseInfo为CADORecordbinding派生类的对象。
5。利用接口方法Update来更新数据库。Update(CADORecordBinding *binding);
6。利用接口方法AddNew方法增加记录.AddNew(CADORecordBinding *binding);
其中binding参数都是CADORecordbinding派生类的对象。