VisualC 编程封装ADO类

2008-04-09 04:09:16来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折



  摘 要:本文介绍了ADO访问数据库的基本过程,给出了一种在Visual C 下封装ADO访问数据库类的方法。

  关键词:封装;ADO;Visual C

  1 引言

  在过去几年中,微软公司相继推出了几种数据访问技术,先是DAO(Data Access Objects),然后是RDO(Remote Data Objects),现在是ADO(ActiceX Data Objects)。ADO是Microsoft数据库应用程序开发的新接口,是微软最新的数据访问技术。它被设计用来同新的数据访问层OLE DB Provider一起协同工作,以提供通用数据访问(Universal Data Access)。ADO向我们提供了一个熟悉的,高层的对OLE DB的Automation封装接口,它简化了数据访问的过程,增加了数据访问的灵活性,是当前数据访问接口的主流技术。

  用VB或者VBScript来操作ADO是非常方便的,但是如果使用C++或者是Java,就必须要处理类似Variants这样的数据结构,从而实现和C++数据结构的转换,而这种处理无疑是C++开发人员都很头疼的事情。而且ADO是应用层的编程接口,它通过OLE DB提供的COM接口访问数据,使用ADO访问数据库需要使用许多API函数和ADO的对象,对于初学者来说,可能有些难度。即便对于ADO的编程高手,经常要书写大量相同的ADO冗余代码,也会感到厌烦。看过网上不少绍封装ADO的各种文章,也各有利弊。笔者在Visual C 下也尝试封装ADO访问数据库类,使其更方便地使用现有的VC的数据类型,简化应用程序书写的逻辑,增加程序的可读性。达到了比较好的应用效果,本文将给出笔者所使用封装方法和源程序。

  2 建立ADO封装类

  2.1 ADO对象基本模型

  ADO模型包含了连接对象、命令对象、域对象、参数对象、记录集对象、错误对象等。对象之间又具有层次关系,其关系如图1所示。



  在VC中使用ADO访问数据库基本过程是:

   初始化COM库,引入ADO库文件

   用Connection对象连接数据库

   利用建立好的连接,通过利用Recordset对象取得结果记录集进行查询、处理。

   使用完毕后关闭连接释放对象

  2.2基本操作函数和数据结构

  封装的ADO类应包括以下函数和数据结构:

  1)建立数据库连接函数OpenDataBase()

  ADO连接数据库首先要用到Connection对象,它是到数据库的物理连接,管理着应用程序和数据库之间的通讯。对于大多数的数据库系统,每一个物理连接都需要耗费大量系统内存,是宝贵的系统资源,不可滥用。考虑到应用程序的效率,每一个数据库客户端都只用一个物理连接,并且应用程序结束后应该释放。

  2)关闭数据库连接函数CloseDataBase()

  3)SQL查询语句函数 Select()

  记录集的建立和查询结果得获取是影响应用程序得效率得关键问题。由于每一次查询结果都可能不一样,所以每个查询语句都要建立一个记录集对象。

  4)执行无返回结果的SQL语句函数Excute()

  5)查询结果数组pData

  为了数据类型转换的方便,我们将记录集数据类型都转换为CString类型,存放在查询结果数组pData中,由于C 的CString是一个高效和功能强大的类,我们可以很方便地读取记录集中的查询结果。

  6)结果数组大小nResultRow和nResultCol
  2.3 ADO封装类头文件

  封装类头文件ADODB.H定义如下:

class CADODB : public CObject
{
public:
CADODB(); //构造函数
~CADODB(); //析构函数
public:
int nResultRow; //查询结果行数
int nResultCol; //查询结果列数
CStringArray pData; //存放查询结果数组 大小为nRow*nCol
CString errormessage; //ADO错误信息
bool OpenDataBase(CString DsnName,CString sUserID,CString sPassword);
//打开数据库连接 输入DSN名称、用户ID和密码
int Select(CString Sql); //执行SQL查询语句,结果放在数组pData中
int Excute(CString Sql); //执行无返回值得SQL语句
bool CloseDataBase(); //关闭数据库连接
protected:
_ConnectionPtr m_pConnection; //定义连接指针
};
  2.4 封装类实现文件

  封装类实现文件ADODB.CPP如下:

#include "stdafx.h"
#include "ADODB.h"

CADODB::CADODB() //构造函数,完成初始化
{
nResultRow=0; //
nResultCol=0; //记录集行数和列数
m_pConnection = NULL;
}

CADODB::~CADODB() //关闭数据库物理连接
{
if(m_pConnection )m_pConnection->Close();
m_pConnection = NULL;
}

bool CADODB::OpenDataBase(CString DsnName,CString sUserID,CString sPassword)
{ //打开数据库连接

HRESULT hr=m_pConnection.CreateInstance("ADODB.Connection");//创建连接对象
hr=m_pConnection->Open((_bstr_t)DsnName,(_bstr_t)sUserID,(_bstr_t)sPassword,adOpenUnspecified); //连接数据库

}

int CADODB::Select(CString SqlStr) //SQL查询语句函数
{ …
try
{
hr = m_pRecordset.CreateInstance("ADODB.Recordset");//创建纪录集对象实例
hr = m_pRecordset->putref_ActiveConnection(m_pConnection);//设置连接对象
hr=m_pRecordset->Open(vSqlString,vNull,adOpenDynamic,adLockOptimistic,adCmdText); //打开纪录集
nResultCol = m_pRecordset->Fields->GetCount();//获得纪录集总列数
while(!m_pRecordset->adoEOF)

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:VC .NETOpenGL编程快速入门

下一篇:VisualC 中函数调用方式浅探

热门词条
热门标签