封装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 nsme = str;
(九)删除一条记录
myado.Delete();
默认删除当前记录,用户根据需要修改枚举参数。
三、增值操作部分
(一)追加一条新记录
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与Find Next,这两个方法经常配合使用。Find在查找到一个符合的记录就停止,FindNext会继续向下查询,直到记录集的末尾。
(六)过滤
myado.Filter("AGE>25");
四、支持算法与支持结构
(一)萃取字段名的算法
void Ufo(CString InStr,vector<CString>&OutStr);
该算法用于支持其他操作,可将一个字符串中的所有字段名分离出来,按顺序压入出参OutStr中。
(二)萃取字段名与字段类型的算法
void GetNameandType(CString ColName,vector<FieldInfor>&OutVnt);
该算法用于支持其他操作,是上一个算法的扩展,在分离字段名的同时,获取该字段的类型,并按顺序一同压入出参OutVnt中。
(三)字段名与的值的结构
struct AddNewCode
{
_variant_t ColName;
_variant_t Value;
};
该结构用于支持其他操作。
五、用户需作的基本操作
1、在工程的stdafx.h中导入msado15.dll;
2、管理COM服务器;
3、将AdoInterface.h、AdoInterface.cpp、DataBelong.h三个文件加在工程目录下,包含AdoInterface.h;
六、结束语
以上是对这个封装类的介绍,用户可以根据自己的需要进行修改和扩展,如果想要隐藏实现细节也可将其做成COM组件,这样使用起来更加灵活。
封装ADO库之MFC应用的更多相关文章
- 【Node.js 自己封装的库 http_parse, libuv】
[Node.js 自己封装的库 http_parse, libuv] Node.js 介绍:一个网络框架,更多:http://www.oschina.net/p/nodejs 官网:http://no ...
- 使用boost.python封装C++库
使用boost.python封装C++库 C++以高性能著称,但是编写较为复杂.而简洁是Python的强项.如果能珠联璧合,就能发挥两家之长.本文尝试用boost库的python模块封装C++ 前期准 ...
- Delphi中封装ADO之我重学习记录
delphi adodataset ctstatic 数据是缓存在服务器端还是客户端 答:客户端,开启本地缓存功能后,就能数据在本地批量修改后,再批量提交,减少了网络传送 原创,专业,图文 Del ...
- 使用delphi 开发多层应用(十六)使用XMLRPC 实现basic4android 远程调用RTC服务(讲述了RTC的特点,其底层通讯协议是自己封装SOCK 库,与kbmmw 的适合场合不完全一样)
RealThinClient (以下简称RTC) 也是一款delphi 多层开发的框架,由于其底层通讯协议是自己封装SOCK 库,抛弃了 大家诟病的indy,因此表现的非常稳定,效率也非常高, ...
- 使用相对路径导入ado库的方法
作者:朱金灿 来源:http://blog.csdn.net/clever101 常用的导入ado库的语句: #import "c:\program files\common files\s ...
- STM32嵌入式开发学习笔记(二):将功能封装为库文件
将所有的函数都堆在main.c文件里不是好的选择,庞大的代码文件会是你维护的障碍,明智的做法是,一种功能封装到一个库文件里. 库文件就是你代码开始部分写的#include<xxxx.h>里 ...
- Blazor组件自做一 : 使用JS隔离封装viewerjs库
Viewer.js库是一个实用的js库,用于图片浏览,放大缩小翻转幻灯片播放等实用操作 本文相关参考链接 JavaScript 模块中的 JavaScript 隔离 Viewer.js工程 Blazo ...
- VC++下封装ADO类以及使用方法
操作系统:windows 7软件环境:visual studio 2008 .Microsoft SQL 2005本次目的:介绍一个已经封装的ADO类,简单说明怎么导入使用 首先声明一下,这个封装的A ...
- HttpLib - 一个对 Http 协议进行封装的库
今日,在 Codeplex 上看到一个开源项目,对 Http 协议进行了封装,这下可以方便这些在 .NET 平台下访问 Web 服务器的同学们了,比如,从 Web 服务器抓取一个页面,使用 .NET ...
随机推荐
- python对象调用父类的方法
#类定义 class People: #定义基本属性 name = '' age = 0 #定义私有属性,私有属性在类外部无法直接进行访问 __weight = 0 #定义构造方法 def __ini ...
- Selenium操作Chrome模拟手机浏览器
目录 使用指定设备 使用自定义设备 在使用Chrome浏览网页时,我们可以使用Chrome开发者工具模拟手机浏览器,在使用Selenium操作Chrome时同样也可以模拟手机浏览器.主要有以下两种用途 ...
- java权限管理与用户角色权限设计
java权限管理与用户角色权限设计 实现业务系统中的用户权限管理 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器 ...
- JDBC工具类:JDBCUtils
1. 目的 每次使用JDBC的时候都要书写冗长的代码段,不符合复用的理念,于是要单独写一个类,将通用的JDBC操作写到一个类中,便于重复使用和精简代码. 2. 步骤 (1)注册驱动并获取连接 为了最大 ...
- what should I use .post vs .ajax?
what should I use .post vs .ajax? 问题: I've always had this dilemma困境 whether to use .post or .ajax f ...
- javascript 的垃圾回收机制讲一下
定义:指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束. 像 C 这样的编程语言,具有低级内存管理原语,如 malloc()和 free().开发人员使用这些原语显式地对操作系统的内存进行 ...
- Send me - PLANETSHAKERS
Send me i will go 送我,我会去 send me i will go 送我,我会 to this city, to this nations 为这城市 为这国家 and to th ...
- Eclipse自动生成作者、日期注释等功能设置 (转载)
原文地址:http://blog.sina.com.cn/s/blog_4080505a0101guoh.html 在使用Eclipse 编写Java代码时,自动生成的注释信息都是按照预先设置好的格式 ...
- 【Canvas】勾画调和级数Harmonic series 曲线 y=1+1/2+1/3+1/4+1/5+1/6+1/7+1/8+....
相关资料:https://baike.baidu.com/item/%E8%B0%83%E5%92%8C%E7%BA%A7%E6%95%B0/8019971?fr=aladdin 调和级数(英语:Ha ...
- python 设计模式之命令(Command)模式
#写在前面 也了解了不少设计模式了,他们都有一个通病,那就是喜欢把简单的东西复杂化.比如在不同的类中加个第三者.哈哈哈,简单变复杂是有目的的,那就是降低耦合度,增强可维护性,提高代码复用性,使代码变得 ...