荟萃馆

位置:首页 > 设计 > 网页设计

vc++中的ADO的应用

摘要介绍了ADO的特点以及在VC++中如何通过ADO开发数据库应用程序。ADO是开发访问OLE数据库应用程序所使用的一种数据库访问组件,是一种可以访问各种数据类型的连接机制。它不仅可以通过OLEDB、ODBC访问数据库,还可以使用几乎任何一种数据源,如SQLServer、Oracle、Access、Excel和文本文件、图形文件等。ADO基于OLEDB,提供统一的数据访问接口,使用简单,容易掌握。

vc++中的ADO的应用

关键词ADO;数据库;应用程序的开发;VC++

1引言

ADO是Microsoft公司新的数据访问技术,由于它是基于OLEDB接口上实现的COM对象,其性能和易用性都达到了极佳水平。ADO并不与数据库直接打交道,而是要通过ODBC驱动程序或OLEDB连接字符串来操作数据库。ODBC或OLEDB是应用程序与数据库进行连接通信的接口,其作用是将特定类型数据库中的数据变换为标准而能统一操作的数据源。利用ADO对象并通过ODBC或OLEDB,可以实现对任意数据库的存取和访问。

ADO模型包括7个对象,主要对象有3个:Connection、Command和Recordset,可以被独立创建和释放。此外,还包括其他4个集合对象:Fields、Errors、Parameters和Properties。一个典型的ADO应用程序使用Connection对象建立与数据源的连接,然后用一个Command对象给出对数据库操作的命令,如插入数据或者查询数据等,而Recordset用于对结果集进行维护或者浏览等操作。其中Command命令所使用的语言与低层所对应的OLEDB数据源有关,不同的数据源可以使用不同的命令语言,对于关系数据库,通常使用SQL作为命令语言。

2VC++中使用ADO开发数据库应用程序一般步骤

在VC++中使用ADO开发数据库应用程序一般包括以下步骤:

(1)初始化COM库,引入ADO库定义文件。

(2)用Connection对象连接数据库。

(3)利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行处理、查询。

(4)使用完后关闭连接,释放对象所占的资源。

3ADO使用实例

3.1引入ADO动态链接库,初始化COM库环境

在使用VisualC++的MFC编程时,MFC并没有提供对ADO的封装类,能够支持ADO编程的是ADO的COM动态链接库文件msado*.dll,“*”位置的'数字代表ADO库的版本。引入该文件的方法是在stdafx.h头文件中,添加如下代码:

#import”c:programfilescommonfilessystemadomaado15.dll”

no_namespacerename(“EOF”,”adoEOF”)

这些命令声明在工程中使用ADO,但不使用ADO的名字空间,并为了避免冲突,将EOF改名为adoEOF。

ADO是基于COM技术的,所以,在应用程序调用ADO前,必须初始化COM库环境。ADO使用结束后需要关闭库,释放初始化加载的动态链接库。

::CoInitialize(NULL);//初始化COM库

::CoUninitialize();//清除COM库

3.2创建ADO与数据库的连接

使用Connection对象打开连接,在引入的动态链接库生成的定义文件(msado15.tlh)中Open方法的定义如下:

HRESULTOpen(_bstr_tConnectionString,_bstr_tUserID,_bstr_tPassword,longOptions)

由于使用的数据库软件的不同,连接串的格式也有所不同,给程序员带来很多麻烦。微软公司提供了一种可视化的方法来解决这个问题,它提供了通用数据连接文件(UDL)来建立和测试ADO的连接属性。

主要代码如下:

HRESULT_ConnectionPtrm_pConnection;//连接对象智能指针

//初始化数据库连接

HRESULThr;

try

{

hr=m_pConnection.CreateInstance(_uuidof(Connection));//实例化连接对象

if(SUCCEEDED(hr))

{

//设置连接串属性为UDL文件

m_pConnection->ConnectionString=”FileName=name.udl”;

//设置等待连接打开的时间为20s

m_pConnection->ConnectionTimeout=20;

hr=m_pConnection->Open(””,””,””,adConnectUnspecified);

if(FAILED(hr))

{

AfxMessageBox(“Openfail”);

ReturnTRUE;

}

}

else

{

AfxMessageBox(“createinstanceofConnectionfail”);

returnTRUE;

}

}

catch(_com_errore)

{

//给出异常信息

_bstr_tbstrSource(e,Source());

_bstr_tbstrDescription(e.Description());

AfxMessageBox(bstrSource+bstrDescription)

returnTRUE;

}

3.3使用记录集(Recordset)对象操作数据库

在ADO程序中,记录集实际上缓存可从数据库获得的记录,应用程序可以从记录集中获得每条记录的字段。Open方法在msado15.h文件中的定义如下:

HRESULTOpen(const_variant_t&Source,const_variant_t&ActiveConntction,enumCursorTypeEnumCursorType,enumLockTypeEnumLockType,longoptions)

其中,参数Source是记录源;参数ActiveConntction指定在哪个连接中打开该记录集;参数CursorType指定打开Recordset时使用的游标;参数LockType指定打开记录集时应该使用的锁定类型;参数options指定参数Source的种类。

主要代码如下:

HRESULThr;

_variant_tvar;

_RecordsetPtrpRecordset;//定义记录集指针

hr=pRecordset.CreateInstance(_uuidof(Recordset));//实例化记录集指针

CStringstrsql;

strsql=”SELECT*FROMnametable”//定义并初始化SQL语句字符串,nametable为表名

try

{//利用Open函数执行SQL命令,获得查询结果记录集

hr=pRecordset->Open(_variant_t(strsql),m_pConnection.GetInterfacePtr(),adOpenDynamic,

adLockOptimistic,adCmdText);

if(hr)

{

while(!pRecordset->adoEOF)

{//获取第1列的值,从0开始计数,也可以直接给出列的名字

var=pRecordset->GetCollect((long)0);

var=pRecordset->GetCollect(“Name”);

pRecordset->MoveNext();//移动当前记录到下一条记录

}

pRecordset->MoveFirst();//移动到首条记录

pRecordset->Delete(adAffectCurent);//删除当前记录

pRecordset->AddNew();//添加新记录

pRecordset->PutCollect(“ID”,_variant_t((long)72));

pRecordset->PutCollect(“Name”,_variant_t(“小王”));

pRecordset->MoveNext();

pRecordset->PutCollect(“Name”,_variant_t(“小周”));//修改Name字段的值

pRecordset->Update//保存到数据库中

}

else

{

AfxMessageBox(“Openrecordsetfail”);

return;

}

}

catch(_com_error*e)

{

AfxMessageBox(e->ErrorMessage());

return;

}

pRecordset->Close();

pRecordset=NULL;

3.4使用Command对象操作数据库

Command对象定义了将对数据源执行的指定命令。使用Command对象的流程和记录集对象类似,首先声明_CommandPtr变量;实例化变量;设置对象的某些属性值;调用Execute方法执行命令。所以,这里就不给出代码了。

4结束语

ADO是应用级的编程接口,它以OLEDB为基础,对OLEDB进行了封装。它的主要优点是易于使用、速度快、内存支出少和使用较少的网络流量。ADO技术是微软大力支持和发展的技术,对于致力与VisualC++的程序员来说,了解和掌握ADO技术具有深远的意义。

参考文献

[1]原奕等编著.VisualC++实践与提高——数据库开发与工程应用篇[M].北京:中国铁道出版社,2006

[2]DavidSceppa著,石钧,葛俊译编程技术[M].北京:清华大学出版社,2001

[3]厄拉森isualC++6编程技术内幕[M].北京:机械工业出版社,2000

[4]江淑娟,苏蕊等.利用ADO方法在C/S模式下实现远程数据访问[J],山东科技大学学报(自然科学版),2003,22(1):73-75

标签:VC ADO