日期:2014-04-08  浏览次数:20912 次

第8章 ADO基础
在本书前7章中,已经讲述了ASP的有关内容,以及ASP如何为Web站点带来动态的内容。已经见到其脚本程序允许自定义Web页面,使我们能够构建功能更为强大的ASP页面。
现在,将研究ASP和数据的集成。虽然对用于网页中的脚本数量并无任何限制,但如果没有某种形式的数据,很快就会进入一个死胡同。数据构成了Web站点的实际内容,或者指出了如何设置Web站点,因此总的说来数据是非常重要的。如果围绕数据存储建立Web站点,改变Web站点时只需要改变相应的数据即可。
ActiveX数据对象(ADO)是允许用户与数据存储进行交互的组件。这意味着只要基于某些数据就可建立一个网页,或一种完全交互的电子商务系统。不论哪种方式,都是ADO使我们能与数据进行通信。我们将讨论从数据存储获取和传送数据的主要内容,以及得到数据后的数据处理方法。
首先研究什么是ADO及其所包括的组件,然后讨论如何访问数据存储。在下一章,将进一步学习ADO更先进的一些特性,如命令、存储过程和优化应用程序的一些操作技巧。下一步研究Web服务器和浏览器之间的交互过程,以及数据处理过程。然后研究数据存取领域中极具潜力的XML。XML是什么?如何使用?因为XML代表着未来发展的一种趋势,我们将介绍微软关于通用数据存取的构想。在这个构想中,数据不只是从数据库中获得的。最后,看一下标准的微软数据库(如Access与SQL Server)以及在其中如何使用ADO。
本章从ADO开始,主要内容有:
· 研究ADO如何与数据进行交互。
· 了解ADO的组件。
· 如何与数据存储连接和创建数据集。
· 如何处理和修改数据。
· 如何处理ADO错误。

8.1 ADO的定义
ADO是一个相当简单的思想,一种让你仅用一种方式去访问数据的思想。ADO不算一个新思想,仅是采用现有的数据库访问技术,并将其融合而形成的一种适应现在和未来需要的新东西。适应未来的需求是一件十分重要的事。许多其他的技术,比如DAO和ODBC,在一些应用程序的开发过程中是可以接受的,然而随着Internet的兴起也出现了其自身的一些问题。
在许多情况下,传统的数据存取方法看上去能解决一些关于两层客户/服务器系统的问题,但要求与数据之间要保持一种永久性的连接,并要提供强大的功能,比如快速响应的查询、数据容易修改等。在Internet领域,现在必须考虑到Web无状态性本质,和潜在的众多可以访问Web站点的用户。要与数据建立永久的连接是不现实的,因此必须在设计应用程序时考虑这些因素。
那么,OLD DB和ADO确切地讲到底是什么?让我们与一些已有的数据存取技术做比较后再来回答这个问题。如果读者曾经接触过数据库编程,或许比较熟悉ODBC和RDO。开放数据库连接(ODBC)是允许访问关系数据库(比如Access和SQL Server)的应用程序编程接口(API)。正因为是一个API,许多程序员,特别是Visual Basic领域的程序员,发现它使用起来很复杂。远程数据对象(RDO)是位于ODBC上层的ActiveX对象,可以提供ODBC的所有功能,并且使用起来比较简单。
可以将OLE DB等同于ODBC,ADO等同于RDO。
OLE DB是应用程序与数据源交互的一种基本技术。
这相当复杂,确实也只有C和C++程序员能够使用。正如ADO的名字所暗示的,它是易于访问OLE DB功能的ActiveX对象。
你或许发现术语ActiveX与COM对象经常混用。对于ASP程序员来说它们并没有本质上的区别,因为两者都基于COM系统结构,只不过ActiveX是组件的一个跨平台标准,而COM是Windows专有的。
虽然微软已经引入了一种新的存取数据的技术,但并没有立即取消旧的技术,ODBC工作起来仍然很有效,并同OLE DB和ADO紧密地一起工作着。事实上,ODBC并不只是微软的产品,也受到国际组件的控制。并且由于广泛的使用,ODBC也不会突然消亡。隐藏在OLE DB背后的思想不是摒弃现有的技术,而是不断地改进它们。

8.1.1 OLE DB和ADO的体系结构
前面已经给出了OLE DB与ADO在一些主要方面的简要解释。图8-1显示了这两项技术与应用程序和数据存储相互关系:

图8-1 OLE DB、ADO与应用程序和数据存储的关系
从图8-1中可以看出整体思路。图的顶端是应用程序(Web或常规的应用程序,这是无关紧要的),下面是提供对数据的访问的ADO和/或OLE DB。ADO和OLE DB两者兼有是因为OLE DB是一项基本技术。然而,OLE DB并不适用于所有语言,所以ADO位于OLE DB的上层,为那些不能直接访问OLE DB的语言(如Visual Basic和脚本语言)提供编程接口。ADO提供了比OLE DB更容易的编程接口,因此即使那些可以直接使用OLE DB的编程语言,如C++或Java,也可使用ADO以简化对数据的访问。
图8-1显示的是微软的编程语言,而ADO是一个COM组件,因此可用于任何与COM兼容的编程语言,比如Delphi或支持Active Scripting接口的脚本语言。所以,虽然ADO与平台有关,但与开发的语言是无关的。当然,对于ASP主要使用VBScript和JScript,在组件中使用ADO时,有一些Visual Basic代码。
现在知道了OLE DB和ADO允许访问数据,可是为什么需要它们?老方法出问题了吗?这里有两个主要原因:
首先,OLE DB和ADO是用来访问数据存储的。注意这里指“数据存储”而不是“数据库”。尽管数据库仍旧是数据存储最为广泛的形式,但并不一定含有全部的数据。一些消息系统,如Microsoft Exchange Server,也普遍地用于存储数据。目录服务(Directory Service)正开始在初露端倪,它们包含着有关用户、机器等的数据;Web服务器中存有大量的信息。可以继续罗列下去,很明显需要一种能访问所有这些不同类型数据的方法。
其次,源于Internet应用程序的兴起与Web的状态本质。过去的访问数据的方法主要考虑与数据存储保持永久连接的情况下处理数据。而OLE DB和ADO正是为解决这个问题而设计的,提供断开连接的记录集,我们将会在后面看到有关这方面的内容。

8.1.2 消费者与提供者
ADO系统结构图展示了ADO是如何在应用程序和真实数据存储之间发挥作用的。在微软的文献中,会看到两个易懂的术语:消费者(Consumer)和提供者(Provider),但搞清它们的确切定义至关重要。
提供者是提供数据的物体,消费者是使用(消耗)这些数据的物体。
在编程中,经常会发现应用程序是数据的消费者。但提供者呢?一般是数据存储,并且由于OLE DB被设计成用于与不同的数据存储对话,因此对于每一个独特类型的数据存储都有一个OLE DB提供者。
这种单独提供者的思想并不新,但使编程变得容易了。编写程序与ADO或OLE DB对话,OLE DB再与提供者对话。这意味着只需学会一套访问数据的方法,无论数据如何存储,在某些情况下确实可以完全不改变任何代码而只更换提供者。这就是ADO和OLE DB真正优越的地方,为数据存储提供了一套常用的编程接口。
要连接到数据存储,必须使用OLE DB提供者。提供给ADO 2.5的初始设置为:
· Jet OLE DB 4.0:用于微软Access数据库。
· DTS Packages:用于SQL Server的数据转换服务(Data Transformation Services)。
· Internet Publishing:用于访问Web服务器。
· Indexing Services:用于索引目录(Index Catalogs)。
· Site Server Search:用于站点服务器查找目录。
· ODBC Drivers:用于ODBC数据源。
· OLAP Services:用于微软OLAP服务器。
· Oracle:用于Oracle数据库。
· SQL Server:用于微软SQL Server数据库。
· Simple Provider:用于简单的文本文件。
· MSDataShape:用于层次数据。
· Microsoft Directory Services:用于Windows 2000的目录服务。
· DTS Flat File:用于SQL Server的数据转换服务的平面文件管理。
这只是微软提供的初始列表,并取决于安装在服务器上的服务及软件。以Oracle数据提供者为例,要求在客户机上安装Oracle的客户端软件。
可以从别的制造商那里获得OLE DB提供者,用于其他数据存储。甚至还可以编写

[1] [2] 下一页