下载 第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.1ADO的定义 ADO是一个相当简单的思想,一种让你仅用一种方式去访问数据的思想。ADO不算一个 新思想,仅是采用现有的数据库访问技术,并将其融合而形成的一种适应现在和未来需要的 新东西。适应未来的需求是一件十分重要的事。许多其他的技术,比如DAO和ODBC,在 些应用程序的开发过程中是可以接受的,然而随着 Internet的兴起也出现了其自身的一些问题 在许多情况下,传统的数据存取方法看上去能解决一些关于两层客户/服务器系统的问题 但要求与数据之间要保持一种永久性的连接,并要提供强大的功能,比如快速响应的查询、 数据容易修改等。在 Internet领域,现在必须考虑到Web无状态性本质,和潜在的众多可以访 问web站点的用户。要与数据建立永久的连接是不现实的,因此必须在设计应用程序时考虑 这些因素 那么, OLE DB和ADO确切地讲到底是什么?让我们与一些已有的数据存取技术做比较
下载 第8章 ADO 基 础 在本书前7章中,已经讲述了A S P的有关内容,以及A S P如何为We b站点带来动态的内容。 已经见到其脚本程序允许自定义 We b页面,使我们能够构建功能更为强大的 A S P页面。 现在,将研究 A S P和数据的集成。虽然对用于网页中的脚本数量并无任何限制,但如果 没有某种形式的数据,很快就会进入一个死胡同。数据构成了 We b站点的实际内容,或者指 出了如何设置We b站点,因此总的说来数据是非常重要的。如果围绕数据存储建立 We b站点, 改变We b站点时只需要改变相应的数据即可。 A c t i v e X数据对象( A D O )是允许用户与数据存储进行交互的组件。这意味着只要基于某些 数据就可建立一个网页,或一种完全交互的电子商务系统。不论那种方式,都是 A D O使我们 能与数据进行通信。我们将讨论从数据存储获取和传送数据的主要内容,以及得到数据后的 数据处理方法。 首先研究什么是 A D O及其所包括的组件,然后讨论如何访问数据存储。在下一章,将进 一步学习A D O更先进的一些特性,如命令、存储过程和优化应用程序的一些操作技巧。下一 步研究We b服务器和浏览器之间的交互过程,以及数据处理过程。然后研究数据存取领域中 极具潜力的X M L。X M L是什么?如何使用?因为X M L代表着未来发展的一种趋势,我们将介 绍微软关于通用数据存取的构想。在这个构想中,数据不只是从数据库中获得的。最后,看 一下标准的微软数据库(如A c c e s s与SQL Server)以及在其中如何使用A D O。 本章从A D O开始,主要内容有: • 研究A D O如何与数据进行交互。 • 了解A D O的组件。 • 如何与数据存储连接和创建数据集。 • 如何处理和修改数据。 • 如何处理A D O错误。 8.1 ADO的定义 A D O是一个相当简单的思想,一种让你仅用一种方式去访问数据的思想。 A D O不算一个 新思想,仅是采用现有的数据库访问技术,并将其融合而形成的一种适应现在和未来需要的 新东西。适应未来的需求是一件十分重要的事。许多其他的技术,比如 D A O和O D B C,在一 些应用程序的开发过程中是可以接受的,然而随着 I n t e r n e t的兴起也出现了其自身的一些问题。 在许多情况下,传统的数据存取方法看上去能解决一些关于两层客户 /服务器系统的问题, 但要求与数据之间要保持一种永久性的连接,并要提供强大的功能,比如快速响应的查询、 数据容易修改等。在 I n t e r n e t领域,现在必须考虑到 We b无状态性本质,和潜在的众多可以访 问We b站点的用户。要与数据建立永久的连接是不现实的,因此必须在设计应用程序时考虑 这些因素。 那么,OLE DB和A D O确切地讲到底是什么?让我们与一些已有的数据存取技术做比较
第章AD0基245 下载 后再来回答这个问题。如果读者曾经接触过数据库编程,或许比较熟悉ODBC和RDO。开放 数据库连接(ODBC)是允许访问关系数据库(比如 Access和 SQL Server)的应用程序编程接口 (API)。正因为是一个API,许多程序员,特别是Ⅴ isual 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显示了这两项技术与 应用程序和数据存储相互关系。 应用程序 脚本 Java OLE DB E-mail 目录服务 数据存储 图8-1 OLE DB、ADO与应用程序和数据存储的关系 从图8-1中可以看出整体思路。图的顶端是应用程序(wWeb或常规的应用程序,这是无关紧 要的),下面是提供对数据的访问的ADO和减或 OLE DB。ADO和 OLE DB两者兼有是因为OLE
后再来回答这个问题。如果读者曾经接触过数据库编程,或许比较熟悉 O D B C和R D O。开放 数据库连接 ( O D B C )是允许访问关系数据库 (比如A c c e s s和SQL Server)的应用程序编程接口 ( A P I )。正因为是一个A P I,许多程序员,特别是 Visual Basic领域的程序员,发现它使用起来 很复杂。远程数据对象 ( R D O )是位于O D B C上层的A c t i v e X对象,可以提供O D B C的所有功能, 并且使用起来比较简单。 可以将OLE DB等同于O D B C,A D O等同于R D O。 OLE DB是应用程序与数据源交互的一种基本技术。 这相当复杂,确实也只有 C和C + +程序员能够使用。正如 A D O的名字所暗示的,它是易于 访问OLE DB功能的A c t i v e X对象。 你或许发现术语A c t i v e X与C O M对象经常混用。对于 A S P程序员来说它们并没有 本质上的区别,因为两者都基于 C O M系统结构,只不过A c t i v e X是组件的一个跨平台 标准,而C O M是Wi n d o w s专有的。 虽然微软已经引入了一种新的存取数据的技术,但并没有立即取消旧的技术。 O D B C工作 起来仍然很有效,并同OLE DB和A D O紧密地一起工作着。事实上, O D B C并不只是微软的产 品,也受到国际组织的控制。并且由于广泛的使用, O D B C也不会突然消亡。隐藏在 OLE DB 背后的思想不是摒弃现有的技术,而是不断地改进它们。 8.1.1 OLE DB和A D O的体系结构 前面已经给出了OLE DB与A D O在一些主要方面的简要解释。图 8 - 1显示了这两项技术与 应用程序和数据存储相互关系。 图8-1 OLE DB、A D O与应用程序和数据存储的关系 从图8 - 1中可以看出整体思路。图的顶端是应用程序 ( We b或常规的应用程序,这是无关紧 要的),下面是提供对数据的访问的 A D O和/或OLE DB。A D O和OLE DB两者兼有是因为O L E 第8章 ADO 基 础计计245 下载 应用程序 脚本 数据存储 目录服务
246Asp;高箱程 Chinaopub.com 下载 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主要使用Ⅴ SCript和 JScript,在组件中使用 ADO时,有一些Ⅴ isual basic代码。 现在知道了 OLE DB和ADO允许访问数据,可是为什么需要它们?老方法出问题了吗? 这里有两个主要原因: 首先, OLE DE和ADO是用来访问数据存储的。注意这里指“数据存储”而不是“数据 库”。尽管数据库仍旧是数据存储最为广泛的形式,但并不一定含有全部的数据。一些消息系 统,如 Microsoft Exchange Server,也普遍地用于存储数据。目录服务( Directory Service)正开 始在初露端倪,它们包含着有关用户、机器等的数据:Web服务器中存有大量的信息。可以 继续罗列下去,很明显需要一种能访问所有这些不同类型数据的方法 其次,源于 Internet应用程序的兴起与Web的状态性本质。过去的访问数据的方法主要考 虑与数据存储保持永久连接的情况下处理数据。而 OLE DB和ADO正是为解决这个问题而设 计的,提供断开连接的记录集,我们将会在后面看到有关这方面的内容 8.1.2消费者与提供者 ADO系统结构图展示了ADO是如何在应用程序和真实数据存储之间发挥作用的。在微软 的文献中,会看到两个易懂的术语:消费者( Comsumer)和提供者( Provider),但搞清它们的确 切定义至关重要 提供者是提供数据的物体,消费者是使用(消耗)这些数据的物体。 在编程中,经常会发现应用程序是数据的消费者。但提供者呢?一般是数据存储,并且 由于 OLE DB被设计成用于与不同的数据存储对话,因此对于每一个独特类型的数据存储都有 个 OLE DE提供者。 这种单独提供者的思想并不新,但使编程变得容易了。编写程序与ADO或 OLE DB对话 LEDB再与提供者对话。这意味着只需学会一套访问数据的方法,无论数据如何存储,在某 些情况下确实可以完全不改变任何代码而只更换提供者。这就是ADO和 OLE DB真正优越的 地方,为数据存储提供了一套常用的编程接口 要连接到数据存储,必须使用 OLE DB提供者。提供给ADO25的初始设置为 Jet ole db40:用于微软 Access数据库 DTS Packages:用于 SQL Server的数据转换服务( Data Transformation Services)e Internet publishing:用于访问web服务器 Indexing services:用于索引目录( Index Catalogs) Site Server Search:用于站点服务器查找目录。 ODBC Drivers:用于ODBC数据源
D B是一项基本技术。然而, OLE DB并不适用于所有语言,所以 A D O位于OLE DB的上层, 为那些不能直接访问OLE DB的语言(如Visual Basic和脚本语言)提供编程接口。A D O提供了比 OLE DB更容易的编程接口,因此即使那些可以直接使用 OLE DB的编程语言,如C + +或J a v a, 也可使用A D O以简化对数据的访问。 图8 - 1显示的是微软的编程语言,而 A D O是一个C O M组件,因此可用于任何与 C O M兼容 的编程语言,比如 D e l p h i或支持Active Scripting接口的脚本语言。所以,虽然 A D O与平台有 关,但与开发的语言是无关的。当然,对于 A S P主要使用V B S c r i p t和J S c r i p t,在组件中使用 A D O时,有一些Visual Basic代码。 现在知道了OLE DB和A D O允许访问数据,可是为什么需要它们?老方法出问题了吗? 这里有两个主要原因: 首先,OLE DB和A D O是用来访问数据存储的。注意这里指“数据存储”而不是“数据 库”。尽管数据库仍旧是数据存储最为广泛的形式,但并不一定含有全部的数据。一些消息系 统,如Microsoft Exchange Server,也普遍地用于存储数据。目录服务 (Directory Service)正开 始在初露端倪,它们包含着有关用户、机器等的数据; We b服务器中存有大量的信息。可以 继续罗列下去,很明显需要一种能访问所有这些不同类型数据的方法。 其次,源于I n t e r n e t应用程序的兴起与 We b的状态性本质。过去的访问数据的方法主要考 虑与数据存储保持永久连接的情况下处理数据。而 OLE DB和A D O正是为解决这个问题而设 计的,提供断开连接的记录集,我们将会在后面看到有关这方面的内容。 8.1.2 消费者与提供者 A D O系统结构图展示了 A D O是如何在应用程序和真实数据存储之间发挥作用的。在微软 的文献中,会看到两个易懂的术语:消费者 ( C o m s u m e r )和提供者( P r o v i d e r ),但搞清它们的确 切定义至关重要。 提供者是提供数据的物体,消费者是使用 (消耗)这些数据的物体。 在编程中,经常会发现应用程序是数据的消费者。但提供者呢?一般是数据存储,并且 由于OLE DB被设计成用于与不同的数据存储对话,因此对于每一个独特类型的数据存储都有 一个OLE DB提供者。 这种单独提供者的思想并不新,但使编程变得容易了。编写程序与 A D O或OLE DB对话, OLE DB再与提供者对话。这意味着只需学会一套访问数据的方法,无论数据如何存储,在某 些情况下确实可以完全不改变任何代码而只更换提供者。这就是 A D O和OLE DB真正优越的 地方,为数据存储提供了一套常用的编程接口。 要连接到数据存储,必须使用 OLE DB提供者。提供给ADO 2.5的初始设置为: • Jet OLE DB 4.0:用于微软A c c e s s数据库。 • DTS Packages:用于SQL Server的数据转换服务(Data Transformation Services)。 • Internet Publishing:用于访问We b服务器。 • Indexing Services:用于索引目录(Index Catalogs)。 • Site Server Search:用于站点服务器查找目录。 • ODBC Drivers:用于O D B C数据源。 246计计ASP 3 高级编程 下载
第章AD0基247 下载 OLAP Services:用于微软OLAP服务器。 · Oracle:用于 Oracle数据库。 SQL Server:用于微软 SQL Server数据库 Simple provider:用于简单的文本文件。 MSDataShape:用于层次数据。 Microsoft Directory Services:用于 Windows2000的目录服务。 · DtS Flat File:用于 SQL Server的数据转换服务的平面文件管理。 这只是微软提供的初始列表,并取决于安装在服务器上的服务及软件。以 Oracle 数据提供者为例,要求在客户机上安装 Oracle的客户端软件。 可以从别的制造商那里获得 OLE DE提供者,用于其他数据存储。甚至还可以编写自己的 提供者。在第11章,将演示如何编写简单的 OLE DB提供者。 要想知道系统中安装了哪些提供者,可以使用 Data Link properties对话框。在本章后面, 将介绍如何使用它。 8.1.3提供者和驱动程序 值得注意的是, OLE DB对ODBC的兼容性,允许 OLE DE访问现有的ODBC数据源。其 优点很明显,由于ODBC相对 OLE DB来说使用得更为普遍,因此可以获得的ODBC驱动程序 相应地要比 OLE DB的要多。这样不一定要得到 OLE DB的驱动程序,就可以立即访问原有的 数据系统。 避免混淆提供者与驱动程序是重要的,图8-2明确了它们之间的区别。 OLE DB oLED8层 Oracle ODBC层 图8-2提供者与驱动程序之间的区别 提供者位于 OLE DB层,而驱动程序位于ODBC层。如果想使用一个ODBC数据源,需要 使用针对ODBC的 OLE DB提供者,它会接着使用相应的ODBC驱动程序。如果不需要使用 ODBC数据源,那么可以使用相应的 OLE DB提供者,这些通常称为本地提供者( native provider) 可以清楚地看出使用ODBC提供者意味着需要一个额外的层。因此,当访问相同的数据时
• OLAP Services:用于微软O L A P服务器。 • Oracle:用于O r a c l e数据库。 • SQL Server:用于微软SQL Server数据库。 • Simple Provider:用于简单的文本文件。 • MSDataShape:用于层次数据。 • Microsoft Directory Services:用于Windows 2000的目录服务。 • DTS Flat File:用于SQL Server的数据转换服务的平面文件管理。 这只是微软提供的初始列表,并取决于安装在服务器上的服务及软件。以 O r a c l e 数据提供者为例,要求在客户机上安装 O r a c l e的客户端软件。 可以从别的制造商那里获得 OLE DB提供者,用于其他数据存储。甚至还可以编写自己的 提供者。在第11章,将演示如何编写简单的 OLE DB提供者。 要想知道系统中安装了哪些提供者,可以使用 Data Link properties对话框。在本章后面, 将介绍如何使用它。 8.1.3 提供者和驱动程序 值得注意的是, OLE DB对O D B C的兼容性,允许 OLE DB访问现有的O D B C数据源。其 优点很明显,由于O D B C相对OLE DB来说使用得更为普遍,因此可以获得的 O D B C驱动程序 相应地要比OLE DB的要多。这样不一定要得到 OLE DB的驱动程序,就可以立即访问原有的 数据系统。 避免混淆提供者与驱动程序是重要的,图 8 - 2明确了它们之间的区别。 图8-2 提供者与驱动程序之间的区别 提供者位于OLE DB层,而驱动程序位于 O D B C层。如果想使用一个 O D B C数据源,需要 使用针对 O D B C的OLE DB提供者,它会接着使用相应的 O D B C驱动程序。如果不需要使用 O D B C数据源,那么可以使用相应的 OLE DB 提供者,这些通常称为本地提供者 ( n a t i v e p r o v i d e r )。 可以清楚地看出使用O D B C提供者意味着需要一个额外的层。因此,当访问相同的数据时, 第8章 ADO 基 础计计247 下载 层 层
248Asp高箱程 Chinapub.com 下载 针对ODBC的 OLE DB提供者可能会比本地的 OLE DB提供者的速度慢一些 82ADO2.5对象模型 虽然在ADO2.5对象模型中出现了两个新对象,但与以前的版本基本上是类似的。图8-3 显示了这些对象以及每个对象之间的关系 Errors Connection Active Con nection Execute( Active Connection Recordset Record Source Collection Save() OpenD Open Stream 图8-3对象之间的相互关系 如果以前曾使用过ADO,你会发现在这个新版本中出现了两个新对象: Stream和 Record 对象。在第11、12章将详细地介绍它们 Properties:集合已经被有意地排除在图8-3外,这样你对几个主要对象之间的交互 关系就一目了然了。在本章的后面,有显示 Properties集合的简化对象模型 让我们更详细地考察这几个对象 nnection对象 Connection对象是使我们能与数据存储相连的对象。只有 Connection对象才能指定希望使 用的 OLE DB提供者、连接到数据存储的安全细节以及其他任何连接到数据存储特有的细节 应该注意的是,不必显式创建一个 Connection对象以连接到数据存储。尽管确实需要指定 连接细节,但没有 Connection对象,一样可以创建 Command、 Recordset和 Record对象。如果 不创建自己的 Connection对象,ADO将会隐含地为你创建一个 Connection对象。如果要对提供 者运行多条命令,应该显式地创建一个 Connection对象,这比每运行一条命令就创建一个连接 更有效。 除了为数据存储提供连接以外, Connection对象允许针对数据存储执行命令操作。这些命 令可以是结构化的或存储的命令(例如,SQL命令或一个存储过程),并且可以有选择地从数据 存储中返回一些数据
针对O D B C的OLE DB提供者可能会比本地的OLE DB提供者的速度慢一些。 8.2 ADO 2.5对象模型 虽然在ADO 2.5对象模型中出现了两个新对象,但与以前的版本基本上是类似的。图 8 - 3 显示了这些对象以及每个对象之间的关系。 图8-3 对象之间的相互关系 如果以前曾使用过 A D O,你会发现在这个新版本中出现了两个新对象: S t r e a m和R e c o r d 对象。在第11、1 2章将详细地介绍它们。 P r o p e r t i e s集合已经被有意地排除在图 8 - 3外,这样你对几个主要对象之间的交互 关系就一目了然了。在本章的后面,有显示 P r o p e r t i e s集合的简化对象模型。 让我们更详细地考察这几个对象。 8.2.1 Connection对象 C o n n e c t i o n对象是使我们能与数据存储相连的对象。只有 C o n n e c t i o n对象才能指定希望使 用的OLE DB提供者、连接到数据存储的安全细节以及其他任何连接到数据存储特有的细节。 应该注意的是,不必显式创建一个 C o n n e c t i o n对象以连接到数据存储。尽管确实需要指定 连接细节,但没有 C o n n e c t i o n对象,一样可以创建 C o m m a n d、R e c o r d s e t和R e c o r d对象。如果 不创建自己的C o n n e c t i o n对象,A D O将会隐含地为你创建一个 C o n n e c t i o n对象。如果要对提供 者运行多条命令,应该显式地创建一个 C o n n e c t i o n对象,这比每运行一条命令就创建一个连接 更有效。 除了为数据存储提供连接以外, C o n n e c t i o n对象允许针对数据存储执行命令操作。这些命 令可以是结构化的或存储的命令 (例如,S Q L命令或一个存储过程),并且可以有选择地从数据 存储中返回一些数据。 248计计ASP 3 高级编程 下载