首页 理论教育COM为基础的VisualC++数据库访问机制研究

COM为基础的VisualC++数据库访问机制研究

【摘要】:基于COM的Visual C++数据库访问机制研究武汉东湖学院计算机科学学院袁琼文章描述了基于COM的Visual C++两种高级数据库访问技术OLEDB和ADO的机制,对二者的特点、性能、差异以及使用进行了探讨。OLE DB和ADO 是基于COM的数据库访问技术,是VisualC++开发数据库应用中提供的新技术,比传统数据库访问技术更加优越。为此,Visual C++提供了ATL模板,用于设计OLE DB数据提供程序和数据应用程序。

基于COM的Visual C++数据库访问机制研究

武汉东湖学院计算机科学学院 袁 琼

文章描述了基于COM的Visual C++两种高级数据库访问技术OLEDB和ADO的机制,对二者的特点、性能、差异以及使用进行了探讨。

一、引言

Visual C++6.0提供了多种多样的数据库访问技术——ODBC(Open DataBase Connectivity)、MFC ODBC(Microsoft Foundation Classes ODBC)、DAO(Data Access Object)、OLE DB(Object Link and Embedding DataBase)和ADO(ActiveX Data Object)。这些技术各有各的特点,但都提供了简单、灵活、访问速度快、可扩展性好的特点,可用于访问不同种类数据源。

MFC ODBC 和DAO 是基于MFC的数据库访问技术,对较复杂的ODBC API进行了封装,提供了简化的调用接口,大大方便了数据库应用程序的开发。程序员不必了解ODBC API和SQL的具体细节,即可完成对数据库的大部分操作。不同的是,MFC ODBC通过ODBC和ODBC驱动程序操作数据;而MFC DAO通过Microsoft Jet访问数据,具有更强的处理能力。MFC DAO同MFC ODBC相比,具有的优势是:特别在处理Microsoft Jet数据库的时候,能够优化性能;与ODBC、Microsoft Access Basic和Microsoft Visual Basic兼容;提供对数据库操作的合法性判断;能够确认数据表之间的关系;具有更加丰富的操作模型。但是,MFC DAO也存在一些缺点,例如运行中对象占用相对多的内存空间。

OLE DB和ADO 是基于COM(Component Object Model)的数据库访问技术,是VisualC++开发数据库应用中提供的新技术,比传统数据库访问技术更加优越。

本文主要介绍OLE DB和ADO,对二者的数据库访问机制、技术特点、性能和差异,以及使用进行研讨。

二、OLE DB数据库访问技术

OLE DB比传统的数据库访问技术更加优越的是:它基于COM接口,对所有的文件系统包括关系数据库和非关系数据库都提供了统一的接口。与ODBC技术相似,OLE DB属于数据库访问技术中的底层接口,直接使用它来设计数据库应用程序需要编写大量的代码。为此,Visual C++提供了ATL模板,用于设计OLE DB数据提供程序和数据应用程序。

(一)OLE DB应用程序的结构

OLE DB数据库应用程序的基本结构如下(图1):

img34

图1 OLE DB数据库应用程序的基本结构

当数据使用者需要对数据库进行操作时,数据使用者并非直接对数据源发出指令,而是通过OLE DB接口与数据库提供者进行交互。数据提供者从数据源取得所要查询的数据时,以表格的形式将其提供给接口,然后由数据使用者从接口取出并使用。

(二) OLE DB对象

OLE DB是由几种COM对象组成,包括7个基本的对象(枚举器(Enumerator)、数据源对象(Data Source Object)、会话(Session)、事务(Transaction)、行集(Rowset)、错误(Error)和命令(Command))。其中,每个对象又包含若干个接口,这些对象和接口的定义是依照COM模型制定的。

枚举器:用于搜寻可用的数据源。

数据源对象:包含与数据源连接的方法、产生会话。

会话:为事务处理提供上下文环境,生成事务、命令和行集。

事务:用于管理数据库的事务,将多个操作合并为一个单一的事务处理。

命令:用于对数据源发送文本命令。

行集:以表的形式显示数据,完成更新、插入、删除等操作。

错误:含有访问数据时产生的错误的信息。

OLE DB应用程序的对象流程如下(图2):

img35

图2 OLE DB应用程序的对象流程

(三)ATL模板

ATL是ActiveX Template Library的缩写。ATL是为COM应用而开发的,是一个产生C++/COM代码的框架。ATL提供了一套基于模板的C++类,通过这些类,可以很容易地创建一个小型的、快速的COM对象。使用ATL能够快速地开发出高效、简洁的代码,同时对COM组件的开发提供最大限度的代码自动生成以及可视化支持。

ATL提供的数据库访问COM接口是对OLE DB API的包装,属于高级的数据库编程接口。ATL提供的数据库访问COM接口主要是如下的几个类。

CDataSource类:该类用于创建一个连接OLE DB客户程序和OLE DB供应程序的数据源对象,常用于向供应程序发送连接数据源名称、用户ID以及口令等属性,在属性建立以后,就可以调用该类的Open方法,打开一个通往OLE DB供应程序的数据连接。

CSession类:该类对象表示了一个客户程序同供应程序的一次对话,通过该对象,可以得到一个命令、事务处理或者行集对象。

CCommand类:该类对象处理数据的操作,可以处理参数化和非参数化的语句。

CRowset类:该类对象代表了来自数据源的数据,用来包含和维护数据。

CAccssor类:该类对象描述了存储在OLE DB用户程序的存储器,通常被定义为行集存储和传输数据,也能由供应程序控制把用户变量绑定到返回数据。

为了应用ATL模板类,必须使用ATL Object Wizard引入ATL产生的模板类。

(四)OLE DB应用程序创建和访问数据库的方法

OLE DB应用程序创建和访问数据库的方法有两种:

(1)以MFC AppWizard(exe)为向导建立应用程序框架,添加对OLE DB支持的头文件,然后使用OLE DB类进行数据库应用开发;

(2)以ATL COM AppWizard为向导建立应用程序框架,该框架直接支持OLE DB的模板类,不需要添加任何头文件。该方法的缺点是,只能为应用程序添加对话框资源,不能使用窗口资源,限制了应用程序的界面开发。

三、ADO数据库访问技术

ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术。ADO技术基于COM,具有COM组件的诸多优点,可以用来构造可复用应用框架,被多种语言支持,能够访问关系数据库、非关系数据库及所有的文件系统。另外,ADO还支持各种客户同173页服务器模块与基于Web的应用程序,具有远程数据服务RDS(Remote Data Service)的特性,是远程数据存取的发展方向。(www.chuimin.cn)

(一)ADO同OLE DB、数据库应用以及数据源之间的关系

ADO同OLE DB、数据库应用以及数据源之间的关系可以用下图来表示(图3):

img36

图3 ADO同OLE DB、数据库应用以及数据源之间的关系

(二)ADO对象

ADO中所提供的对象只用于数据应用程序。在ADO对象中使用了OLE DB服务提供程序和OLE DB数据提供程序所提供的接口和服务,ADO对象的结构图如下(图4):

img37

图4 ADO对象的结构

可以看出,ADO模型包含了7种对象,4种集合。

连接(Connection)对象:通过该对象操作数据源。

命令(Command)对象:使用该对象可以查询数据库并返回一个Recordset对象,执行一个批量的数据操作。

参数(Parameter)对象:Parameter对象在Command对象中用于指定参数化查询或者存储过程的参数。

记录集(Recordset)对象:通过Recordset对象可以操纵来自数据提供者的数据,包括修改和更新行、插入和删除行。

域(Field)对象: Recordset对象的一行由一个或多个Fields对象组成,为了修改数据源里的数据,必须首先修改Recordset对象各个行里Field对象里的值,最后Recordset对象将这些修改提交到数据源。

错误(Error)对象:Error对象包含了ADO数据操作时发生错误的详细描述。

属性(Property)对象:Property对象代表了一个由提供者定义的ADO对象的动态特征。

(三)ADO访问数据库的方法及步骤

VisualC++6.0为ADO操作提供了库支持,借助import宏将该库文件引用到工程里产生所有ADO对象的描述和声明,即可进行数据库应用开发。

ADO访问数据库的方法及步骤如下。

(1)创建一个Connection对象。

(2)打开数据源,建立同数据源的连接。

(3)执行一个SQL命令。一旦连接成功,就可以运行查询了。可以以异步方式运行查询,也可以异步地处理查询结果,ADO会通知提供者后台提供数据。这样可以让应用程序继续处理其他的事情而不必等待。

(4)使用结果集。完成了查询以后,结果集就可以被应用程序使用了。在不同的光标类型下,可以在客户端或者服务器端浏览和修改运行数据。

(5)终止连接。当完成了所有数据操作后,可以销毁这个同数据源的连接。

四、ADO与OLE DB的比较

ADO相比OLE DB具有的特点:

(1)便于使用;

(2)支持多种编程语言,包括Visual Basic、Java、C++、VBScript和JavaScript;

(3)支持任何的OLE DB的服务器,ADO可以操作任何的OLE DB数据源;

(4)不损失任何OLE DB的功能,ADO支持C++编程人员操作底层的OLE DB接口;

(5)可扩展性,ADO能够通过提供者属性集合动态地表示指定的数据提供者,还能够支持COM的扩展数据类型。

五、结语

Visual C++提供的访问数据库新技术OLE DB和ADO,由于它们是基于COM——组件对象模型,因此能够充分发挥COM标准的优势,不仅具有客户/服务器模型特性,还具有语言无关性,进程透明性和可重用机制。

OLE DB对数据库的访问,不再基于关系型数据库,而是几乎适用于所有的线性模型;DAO作为建立在OLE DB上层的自动化对象库,可以广泛运用于各种脚本语言,为脚本语言访问数据库提供了极大的便利。

OLE DB/DAO以COM方式为数据库访问提供了一致的接口,被广泛运用于微软的各种产品中,必将会得到进一步的发展。

参考文献

[1] 夏云庆.Visual C++6.0数据库高级编程[M].北京:北京希望电子出版社,2002.

[2] 成功等.VC中几种数据库访问技术的比较与选择[J].计算机应用研究,2002(2).

[3] 黄陇等.基于MFC的VisualC++数据库访问机制研究[J].计算机与网络,2003(15).

[4] 俞建等.数据库访问技术研究[J].计算机与现代化,2004(10).