现在的位置: 首页 > 综合 > 正文

一个常见数据库操作错误的分析(三)

2013年08月01日 ⁄ 综合 ⁄ 共 4580字 ⁄ 字号 评论关闭

接下来再看看什么是ADO/OLEBD

一致的数据访问技术——ADO/OLE DB

潘爱民

北京大学计算机科学技术研究所(100871)

【摘要】本文首先介绍了Microsoft提出的一致数据访问技术——ADO/OLE DB,然后介绍了ADO的对象模型,以及ADO的高级特性,最后通过例子说明了ADO的用法。

关键字:UDA (Universal Data Access)ADO(Active Data Object)ASP(Active Server Page)OLE DBCOM、自动化(Automation)

Microsoft新近推出的一致数据访问(Universal Data AccessUDA)技术为关系型或非关系型数据访问提供了一致的访问接口,为企业级Intranet应用多层软件结构提供了数据接口标准。一致数据访问包括两层软件接口,分别为ADO(Active Data Object)OLE DB,对应于不同层次的应用开发,ADO提供了高层软件接口,可在各种脚本语言(Script)或一些宏语言中直接使用;OLE DB提供了低层软件接口,可在C/C++语言中直接使用。ADOOLE DB为基础,它对OLE DB进行了封装。一致数据访问技术建立在MicrosoftCOM(组件对象模型)基础上,它包括一组COM组件程序,组件与组件之间或者组件与客户程序之间通过标准的COM接口进行通讯。

由于ADO建立在自动化(Automation)基础上,所以ADO的应用场合非常广泛,不仅可在Visual Basic这样的高级语言开发环境中使用,还可以在一些脚本语言中使用,这对于开发Web应用,在ASP(Active Server Page)的脚本代码访问数据库提供了捷径。本文将首先介绍ADOOLE DB的结构模型,以便读者了解ADOOLE DB之间的关系,然后介绍ADO的对象模型和ADO的一些特性,同时我们也将通过一些例子代码向读者展示ADO的用法。

一致数据访问介绍

随着网络技术和数据库技术的不断发展,现在的应用系统对数据集成的要求越来越高,这些数据有可能分布在不同的地方,并且使用不同的格式,例如关系型数据库、操作系统中的文件、电子表格、电子邮件、多媒体数据、目录服务信息等等。传统的解决方案是使用大型的数据库系统,把所有这些数据都移到数据库系统中,然后按照操作数据库的办法对这些数据进行访问,这样做虽然能够按统一的方式对数据进行各种操作,但这种间接访问方式带来了很多问题,比如数据更新不及时、空间资源的冗余、访问效率低等。

Microsoft推出的一致数据访问技术则较好地解决了这些问题,它使应用可通过一致的接口来访问各种各样的数据,而不管数据驻留在何处,也不需要进行数据转移或复制、转换,在实现分布式的同时也带来了高效率。并且UDA技术在统一数据访问接口的同时,它的多层结构使数据使用方有了更多的选择机会,而它强大的扩展能力也给数据提供方留下了更多的扩展余地,这种开放型的软件结构使它具有极强的生命力,所以,这种技术从一推出便获得了广泛的欢迎,可以说,UDA技术是继ODBC之后的又一数据访问技术的飞跃。

UDA技术包括OLE DBADO两层标准接口,OLE DB是系统级的编程接口,它定义了一组COM接口,这组接口封装了各种数据系统的访问操作,这组接口为数据使用方和数据提供方建立了标准,OLE DB还提供了一组标准的服务组件,用于提供查询、缓存、数据更新、事务处理等操作,因此,数据提供方只需实现一些简单的数据操作,在使用方就可以获得全部的数据控制能力。

ADO是应用层的编程接口,它通过OLE DB提供的COM接口访问数据,它适合于各种客户/服务器应用系统和基于Web的应用,尤其在一些脚本语言中访问数据库操作是ADO的主要优势。ADO是一套用自动化(Automation)技术建立起来的对象层次结构,它比其它的一些对象模型如DAO(Data Access Object)RDO(Remote Data Object)等具有更好的灵活性,使用更为方便,并且访问数据的效率更高。

1显示了统一数据访问的软件层次模型。

1 UDA的层次结构图

从图中我们可以看出,应用程序既可以通过ADO访问数据也可以直接通过OLE DB访问数据,而ADO则通过OLE DB访问底层数据。而且,OLE DB分成两部分,一部分由数据提供者实现,包括一些基本功能,如获取数据、修改数据、添加数据项等;另一部分由系统提供,包括一些高级服务,如游标功能、分布式查询等等。这样的层次结构既为数据使用者即应用程序提供了多种选择方案,又为数据提供方简化了服务功能的实现手段,它只需按OLE DB规范编写一个COM组件程序即可,使得第三方发布数据更为简便,而在应用程序方可以得到全面的功能服务,这充分体现了OLE DB两层结构的优势。

由于OLE DBADO都以COM组件的形式实现,所以COM组件的各种特性也使得构建数据应用更为灵活,而不仅仅局限于一般的客户/服务器或Web应用模型,它既适合于以数据为中心的应用,也适合于多层结构的分布式软件系统。通过对COM组件的配置,我们可以建立各种复杂的应用系统。利用从COMDCOM的位置透明技术,我们可以很方便地建立分布式应用系统;利用MTS(Microsoft Transaction Server)运行环境,我们也可以在数据访问一层增加安全性控制,并利用MTS的对象管理使数据访问效率更高。所有这些功能都无须数据提供方编写代码实现,只需在DCOMMTS环境中进行常规的配置即可。

可以说一致的数据访问技术的核心是OLE DBOLE DB建立了数据访问的标准接口,它把所有的数据源经过抽象形成行集(rowset)的概念。OLE DB模型主要包括以下一些COM对象:

(1)    数据源(Data Source)对象。数据源对象对应于一个数据提供者,它负责管理用户权限、建立与数据源的连接等初始操作。

(2)    会话(Session)对象。在数据源连接的基础上建立会话对象,会话对象提供了事务控制机制。

(3)    命令(Command)对象。数据使用者利用命令对象执行各种数据操作,如查询命令、修改命令等。

(4)    行集(Rowset)对象。提供了数据的抽象表示,它可以是命令执行的结果,也可以直接由会话对象产生,它是应用程序主要的操作对象。

OLE DB的对象模型非常简单,这种简单性也带来了灵活性,从上面的几个COM对象也可以看出这一点。下面我们将从应用层角度出发,通过建立在OLE DB基础上的ADO对象模型结构的分析和使用以帮助读者进一步理解一致数据访问技术。

二、ADO对象模型

ADO对象模型定义了一组可编程的自动化对象,可用于Visual BasicVisual C++Java以及其它各种支持自动化特性的脚本语言。ADO最早被用于Microsoft Internet Information Server中访问数据库的接口,与一般的数据库接口相比,ADO可更好地用于网络环境,通过优化技术,它尽可能地降低网络流量;ADO的另一个特性是使用简单,不仅因为它是一个面向高级用户的数据库接口,更因为它使用了一组简化的接口用以处理各种数据源。这两个特性使得ADO必将取代RDODAO,成为最终的应用层数据接口标准。

从图1我们也看到了ADO实际上是OLE DB的应用层接口,这种结构也为一致的数据访问接口提供了很好的扩展性,而不再局限于特定的数据源,因此,ADO可以处理各种OLE DB支持的数据源。

下面我们先给出ADO的对象模型图:

2 ADO对象模型

ADO模型中,主体对象只有三个:ConnectionCommandRecordset,其它四个集合对象ErrorsPropertiesParametersFields分别对应ErrorPropertyParameterField对象,整个ADO对象模型由这些对象组成。

一个典型的ADO应用使用Connection对象建立与数据源的连接,然后用一个Command对象给出对数据库操作的命令,比如查询或者更新数据等,而Recordset用于对结果集数据进行维护或者浏览等操作。Command命令所使用的命令语言与底层所对应的OLE DB数据源有关,不同的数据源可以使用不同的命令语言,对于关系型数据库,通常使用SQL作为命令语言。

ConnectionCommandRecordset三个对象中,Command对象是个可选对象,它是否有效取决于OLE DB数据提供者是否实现了ICommand接口。由于OLE DB可提供关系型数据源也可以提供非关系型数据源,所以在非关系型数据源上使用传统的SQL命令查询数据有可能无效,甚至Command命令对象也不能使用。

从结构上看,ADO模型非常简单,但使用上又非常灵活,下面我们先从单个对象的角度进行讨论:

(1)    Connection对象。Connection对象代表与数据源之间的一个连接,ADOConnection对象封装了OLE DB的数据源对象和会话对象。根据OLE DB提供者的不同性能,Connection对象的特性也有所不同,所以Connection对象的方法和属性不一定都可以使用。利用Connection对象,我们可以完成以下一些基本设置操作:

a.    通过ConnectionStringConnectionTimeOutMode属性设置连接串、超时信息、访问模式。

b.    还可以设置CursorLocation属性以便指定使用客户端游标,以便在客户程序中使用批处理修改方式。

c.    设置连接的缺省数据库属性DefaultDatabase

d.    设置OLE DB提供者的属性Provider

e.    通过OpenClose控制Connection对象与物理数据源的连接。

f.     通过Execute方法执行命令。

g.    提供事务机制,通过BeginTransCommitTransRollbackTrans方法实现事务控制。

h.    通过Errors集合属性检查数据源的错误信息。

i.      通过OpenSchema方法获取数据库的表信息。

Connection对象是ADO的基本对象之一,它独立于所有其它的对象。如果我们要对数据库进行查询操作,既可以使用Execute方法,也可以使用Command对象。使用Execute方法比较简便,但用Command对象可以保存命令的信息,以便多次查询。

(2)    Command对象。Command对象代表一个命令,可以通过其方法执行针对数据源的有关操作,比如查询、修改等。Command对象的用法如下:

a.    通过CommandText属性设置命令串。

b.    通过Parameters集合属性和Parameter对象定义参数化查询或存储过程的参数。

c.    通过Execute方法执行命令,可能的话,返回Recordset对象。

d.    在执行命令之前,可通过设置CommandType属性以便优化性能。

e.    可以通过Prepared属性指示底层的提供者为当前命令准备一个编译过的版本,以后再执行时,速度会大大加快。

抱歉!评论已关闭.