分享
 
 
 

封装ADO之MFC应用

王朝vc·作者佚名  2006-01-17
窄屏简体版  字體: |||超大  

封装ADO之MFC应用

作者:武鹏

下载例子源代码

Microsoft ActiveX Data Objects (ADO) 支持用于建立基于客户端/服务器和 Web 的应用程序的主要功能。其主要优点是易于使用、高速度、低内存支出和占用磁盘空间较少。

本次封装的CadoInterface类仅针对MFC的使用,目的是优化对ADO的操作,避免频繁写try

catch(…)以及在连库、开表、写数据、读数据等过程中一些重复性的工作。该类仅对一些常用的操作进行封装,用户可以根据需要进行修改和扩展。

封装类主要包括:基本操作、增值操作、支持算法与支持结构。基本操作、增值操作、支持算法在AdoInterface.h与AdoInterface.cpp中声明定义,支持结构在DataBelong.h中定义。

这里主要介绍该类的应用,实现细节的说明在代码中均有注释。

一、封装类的关系

图一 封装类关系图,箭头代表包含关系,用户使用时只需包含界面文件AdoInterface.h

二、基本操作部分

(一)连接数据库

CString Conn="provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb";

myado.ConnecDataLibrary(Conn,"","");

本例连接了一个无密码的Access库,如用其他方式连接数据库,用户可自行更改连接字符串,或者以枚举方式将多种连接方式封装到本函数中。

(二)开表

myado.OpenSheet("select * from file");

用户仅需给出开表条件即可,其他的枚举参数均有默认值,如用户需要以不同方式打开,则可以重新给定枚举参数的默认值。

(三)关库、关表

myado.CloseSheet();

myado.CloseDataLibrary();

(四)返回指针

myado.GetConnPtr();

myado.GetRecoPtr();

如用户的需求超出本类提供的操作时,可以通过这两个函数获取_ConnectionPtr与_RecordsetPtr指针,调用ADO的操作。

(五)属性判断

myado.BOF();

myado.adoEOF();

(六)指针的移动

5种基本的指针移动(包括:MoveFirst、MoveLast、MoveNext、MovePrevious与Move(long

Num))。

(七)执行SQL语句

CString str="Delete from file where AGE=36";

myado.Execute(str);

(八)获得字段内容

_variant_t str;

myado.GetCollect("NAME",str);

CString name=str;

(九)删除一条记录

myado.Delet();

默认删除当前记录,用户可根据需要修改枚举参数。

三、增值操作部分

(一)追加一条新记录

AddNewCode insert[3];

insert[0].ColName="NAME"; insert[0].Value="插入一条新记录";

insert[1].ColName="AGE"; insert[1].Value=18;

insert[2].ColName="TIME"; insert[2].Value="1999/9/9";

myado.AddNewRecode(insert,3);

用户需要确定向该条记录的哪些字段添写数据,然后根据字段的个数定义数组(AddNewCode为支持结构)。本函数需要两个参数:支持结构的数组指针与添写字段的个数。

(二)追加一条新记录(扩展)

myado.AddNewRecodeEx2("FF,NAME,小数,NUM,AGE,TIME",-2.17,"查林杰",3.1415927,10,-18,"1995/6/9");

该函数采用了未定参数的形式(类似于CString中的Format()函数形式)。

第一个参数为要写入字段的字段名,字段名要以字符串方式给出,字段名之间用逗号分开;后面的参数为赋值参数,要与前面的字段名一一对应,赋值方式参考应用举例。

(三)获取一条记录的内容

_variant_t ColName[5];

ColName[0]="ID";ColName[1]="NAME";ColName[2]="AGE";ColName[3]="TIME";ColName[4]="HF";

_variant_t OutValue[5];

CString id,name1,age,time,hf;

myado.GetOneRecord(ColName,5,OutValue);

id=OutValue[0];name1=OutValue[1]; age=OutValue[2];time=OutValue[3]; hf=OutValue[4];

该函数需要三个参数,第一参数要一个_variant_t数组,顺序给定要获取的字段名;第二个参数为要获取字段的个数;第三个为出参,也要一个_variant_t数组,用来顺序保存所获取的数据。

(四)获取一条记录的内容(扩展)

long la=0,lb=0; double da=0,db=0; CString s1="",s2="";

myado.GetOneRecordEx2("FF,NAME,小数,NUM,AGE,TIME",&da,&s1,&db,&la,&lb,&s2);

该函数采用了未定参数的形式(类似于CString中的Format()函数形式)。

第一个参数为要获取字段的字段名,字段名要以字符串方式给出,字段名之间用逗号分开;后面的参数为接收变量的地址,要与前面的字段名一一对应,函数执行后,各接收变量中保存了所获取的数据。

(五)查找

myado.Find("AGE=47");

while(myado.FindNext())

{

……

}

查找包括Find与FindNext,这两个方法经常配合使用。Find在查找到一个符合条件的记录时就停止,FindNext会继续向下查询,直到记录集的末尾。

(六)过滤

myado.Filter("AGE25");

四、支持算法与支持结构

(一)萃取字段名的算法

void Ufo(CString InStr,vector& OutStr);

该算法用于支持其他操作,可将一个字符串中的所有字段名分离出来,按顺序压入出参OutStr中。

(二)萃取字段名与字段类型的算法

void GetNameandType(CString ColName,vector& OutVnt);

该算法用于支持其他操作,是上一个算法的扩展,在分离字段名的同时,获取该字段的类型,并按顺序一同压入出参OutVnt中。

(三)字段名与的值的结构

struct AddNewCode

{

_variant_t ColName;

_variant_t Value;

};

该结构用于支持其他操作。

(四)字段名与类型的结构

struct FieldInfor

{

_bstr_t Name;

DataTypeEnum Type;

};

该结构用于支持其他操作。

五、用户需作的基本操作

1、在工程的stdafx.h中导入msado15.dll;

2、管理COM服务器;

3、将AdoInterface.h、AdoInterface.cpp、DataBelong.h三个文件加在工程目录下,包含AdoInterface.h;

六、结束语

以上是对这个封装类的介绍,用户可以根据自已的需要进行修改和扩展,如果想要隐藏实现细节也可将其做成COM组件,这样使用起来更加灵活。希望它能给大家操作数据库带来方便或者一些启示。

示例程序由Visual Studio.NET2003编译,在Win2000下通过测试。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有