zoukankan      html  css  js  c++  java
  • 封装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组件,这样使用起来更加灵活。

  • 相关阅读:
    java获取Mp3播放时长
    angular ajax的使用及controller与service分层
    mysql数据库不能远程访问的问题
    linux安装ant
    jquery中,使用append增加元素时,该元素的绑定监听事件失效
    类变量与实例变量
    ajax两张传输数据方式
    jquery的.html(),.text()和.val()方法
    如何在sublime text上快速访问html页面?
    java学习笔记之线程2wait和notifyAll
  • 原文地址:https://www.cnblogs.com/wjq13752525588/p/11713835.html
Copyright © 2011-2022 走看看