下载 第10章ASP与客户端数据 在一本ASP专著中讨论客户端数据,这与服务器端的ASP编程是否矛盾?情况并非如此, 因为我们至今尚未碰到只从事服务器端编程的ASP程序员。虽然ASP是一项服务器端技术,但 可以想像,编程人员不可能仅仅使用ASP进行编程。从事ASP编程的web开发人员,仍然需要 与客户端数据进行交互。 因此,围绕着ASP构建一个应用程序时必须考虑整个应用程序的情况,这也意味着必须 考虑客户端。为了获得一个运行良好、快速响应的应用程序,需要很好地使用客户端数据。 本章将讨论如何在客户端使用数据。特别将着重研究: ·远程数据服务( Remote Data Services,RDS),如何向客户端传送数据以及从客户端接收 数据。 ·如何将ADO记录集绑定到HTML控件。 如何利用用户自定义组件提供数据 如何更新客户端数据,并将其反馈到服务器 如何从数据库中获取图像并将其显示在Web页面中。 ·如何创建基于表格的Web页面 以上覆盖的范围相当广泛,同时有很多不同的方法可以取得相同的结果,但实际上实现 起来并不是特别困难。 10.1断开连接的记录集 首先需要掌握的是“断开连接的数据”的概念。迄今为止,在研究ADO的过程中,已经 学习了获取记录集的方法,以及如何修改这些记录集中的数据。回顾一下,我们打开一个记 录集,对数据做一些修改,然后再关闭这个记录集,在操作记录集的过程中,始终与服务器 持着连接。这是相当明显的,但别忘了Web在本质上是无状态的。如果想使用客户端数据 如何始终保持与服务器的连接?很简单,这是不可能实现的,这也是定义断开连接的记录 概念的缘由 个断开连接的记录集只是一个普通的记录集,但解除了与服务器的连接,成为孤立的 对象,可以像普通的记录集那样对其执行更新、增加和删除操作。但这些变化只发生在记录 集内部,并不反馈到服务器,因为记录集与服务器已不再保持着连接。这并不是缺点,因为 可以与服务器重新建立连接,同时服务器可以对任何修改进行更新。即使服务器端的数据已 经改变了,ADO仍然有方法让用户及时发现这些变化,这样用户就能决定哪些数据是正确的 这称为冲突处理( conflict resolution) 断开连接的记录集使我们能在组件之间,包括服务器与客户之间,传送具有全部功能的 记录集。本章后面将探讨如何在组件内创建断开连接的记录集。但这里不准备对此做过于详 细的研究,因为在本书第13章至第18章已经覆盖了这部分内容,这里仅做简单的介绍,以便 于了解组件是如何与远程数据服务交互
下载 第10章 ASP与客户端数据 在一本A S P专著中讨论客户端数据,这与服务器端的 A S P编程是否矛盾?情况并非如此, 因为我们至今尚未碰到只从事服务器端编程的 A S P程序员。虽然A S P是一项服务器端技术,但 可以想像,编程人员不可能仅仅使用 A S P进行编程。从事A S P编程的We b开发人员,仍然需要 与客户端数据进行交互。 因此,围绕着 A S P构建一个应用程序时必须考虑整个应用程序的情况,这也意味着必须 考虑客户端。为了获得一个运行良好、快速响应的应用程序,需要很好地使用客户端数据。 本章将讨论如何在客户端使用数据。特别将着重研究: • 远程数据服务(Remote Data Services,R D S ),如何向客户端传送数据以及从客户端接收 数据。 • 如何将A D O记录集绑定到H T M L控件。 • 如何利用用户自定义组件提供数据。 • 如何更新客户端数据,并将其反馈到服务器。 • 如何从数据库中获取图像并将其显示在 We b页面中。 • 如何创建基于表格的We b页面。 以上覆盖的范围相当广泛,同时有很多不同的方法可以取得相同的结果,但实际上实现 起来并不是特别困难。 10.1 断开连接的记录集 首先需要掌握的是“断开连接的数据”的概念。迄今为止,在研究 A D O的过程中,已经 学习了获取记录集的方法,以及如何修改这些记录集中的数据。回顾一下,我们打开一个记 录集,对数据做一些修改,然后再关闭这个记录集,在操作记录集的过程中,始终与服务器 保持着连接。这是相当明显的,但别忘了 We b在本质上是无状态的。如果想使用客户端数据, 如何始终保持与服务器的连接?很简单,这是不可能实现的,这也是定义断开连接的记录集 概念的缘由。 一个断开连接的记录集只是一个普通的记录集,但解除了与服务器的连接,成为孤立的 对象,可以像普通的记录集那样对其执行更新、增加和删除操作。但这些变化只发生在记录 集内部,并不反馈到服务器,因为记录集与服务器已不再保持着连接。这并不是缺点,因为 可以与服务器重新建立连接,同时服务器可以对任何修改进行更新。即使服务器端的数据已 经改变了,A D O仍然有方法让用户及时发现这些变化,这样用户就能决定哪些数据是正确的。 这称为冲突处理(conflict resolution)。 断开连接的记录集使我们能在组件之间,包括服务器与客户之间,传送具有全部功能的 记录集。本章后面将探讨如何在组件内创建断开连接的记录集。但这里不准备对此做过于详 细的研究,因为在本书第 1 3章至第1 8章已经覆盖了这部分内容,这里仅做简单的介绍,以便 于了解组件是如何与远程数据服务交互的
300Asp高箱程 Chinapub. coM 下载 102远程数据服务 远程数据服务( Remote data services,RDS)是允许我们处理客户端数据的一系列服务的统 称。现在不用担心这方面的问题,因为RDS本身就是ADO的一部分,只有在需要传送和使用 客户端数据时,才会使用。实际上RDS是由几个组件构成的。图10-1说明了这些组件以及它 们之间是如何协同工作的 客户端 服务器 数据存储 数据绑定 管理器 OLE DB 提供者 客户端 数据源 数据缓存 DataFactory 对象 组件 DataSpace eb 服务器 图10-1RDS的组件构成 组件似乎很多,但并不是所有的组件在每种情形下都被使用,实际上有一些不是RDS的 一部分。然而这里还是把所有可能出现的组件都放在了图上,以备需要时查看。图10-1分成 了两部分,因为使用客户端数据需要一些向客户端传送数据的方法,同时数据一旦到达客户 端,也需要一些管理数据的方法。我们先从服务器端开始 10.21RDS服务器组件 虽然RDS用于传送和访问客户端数据,但其确实有一些基于服务器的组件。这是必需的, 因为肯定需要某种方式将数据传送到客户端。因此有了一系列能访问数据并允许发送数据到 客户端的服务器组件。我们把实际的数据传送称为调度( marsha) 服务器端组件图的最上端是数据存储,由 OLE DB提供者访问。它并不是RDS的一部分, 但这表示只要有相应的 OLE DB提供者,就可以通过RDS在客户端使用任何数据。至于如何处 理服务器上的数据,可以有两种选择 数据工厂( DataFactory)是缺省的用于访问数据存储的服务器端组件。它作为服务器端 RDS组件的一部分安装在计算机上,除了能从数据存储中获取数据外,还为服务器处理 发送到客户端以及从客户端发送来的数据 自定义组件只是一个普通的提供了数据传送方法的COM组件。当数据工厂不能提供所 需的功能时,可以使用自定义组件。本章将介绍一个简单的组件例子,在本书的后面还 有一个更复杂的例子 eb服务器使用这两种组件作为客户和服务器数据的接口
10.2 远程数据服务 远程数据服务(Remote Data Services,R D S )是允许我们处理客户端数据的一系列服务的统 称。现在不用担心这方面的问题,因为 R D S本身就是A D O的一部分,只有在需要传送和使用 客户端数据时,才会使用。实际上 R D S是由几个组件构成的。图 1 0 - 1说明了这些组件以及它 们之间是如何协同工作的。 图10-1 RDS的组件构成 组件似乎很多,但并不是所有的组件在每种情形下都被使用,实际上有一些不是 R D S的 一部分。然而这里还是把所有可能出现的组件都放在了图上,以备需要时查看。图 1 0 - 1分成 了两部分,因为使用客户端数据需要一些向客户端传送数据的方法,同时数据一旦到达客户 端,也需要一些管理数据的方法。我们先从服务器端开始。 10.2.1 RDS服务器组件 虽然R D S用于传送和访问客户端数据,但其确实有一些基于服务器的组件。这是必需的, 因为肯定需要某种方式将数据传送到客户端。因此有了一系列能访问数据并允许发送数据到 客户端的服务器组件。我们把实际的数据传送称为调度 ( m a r s h a l )。 服务器端组件图的最上端是数据存储,由 OLE DB提供者访问。它并不是 R D S的一部分, 但这表示只要有相应的OLE DB提供者,就可以通过R D S在客户端使用任何数据。至于如何处 理服务器上的数据,可以有两种选择: • 数据工厂 ( D a t a F a c t o r y )是缺省的用于访问数据存储的服务器端组件。它作为服务器端 R D S组件的一部分安装在计算机上,除了能从数据存储中获取数据外,还为服务器处理 发送到客户端以及从客户端发送来的数据。 • 自定义组件只是一个普通的提供了数据传送方法的 C O M组件。当数据工厂不能提供所 需的功能时,可以使用自定义组件。本章将介绍一个简单的组件例子,在本书的后面还 有一个更复杂的例子。 We b服务器使用这两种组件作为客户和服务器数据的接口。 300计计ASP 3 高级编程 下载 客户端 Name: Client: 服务器 数据绑定 管理器 数据源 对象 网络 DataSpace 对象 客户端 数据缓存 数据存储 OLE DB 提供者 Web 服务器 DataFactory 对象 自定义 组件
Chinaopub.com 第1049与客户端经据30 下载 10.22RDS客户组件 在客户端先从底端的 DataSpace对象开始,该对象作为客户端的一部分与数据工厂或自定 义对象协同工作。 DataSpace对象是一个代理对象,负责与服务器进行通信,同时也是数据传 输的通道(或通常所说的调度)。 DataSpace对象是用客户端脚本语言或用HTML语言中的 标记创建的COM对象。在本章后面会看到关于这方面的例子。 DataSpace对象上面是数据源对象( Data Source Object,Dso),负责存储客户端数据 个数据源对象包含一个ADO数据记录集,与客户数据缓存共同管理数据。客户数据缓存只是 种管理客户端数据的客户光标服务。同时数据源对象又是一个COM对象,与 DataSpace对象 类似,也可以通过客户端脚本或使用HTML语言中的标记来创建。同样,在本章 稍后也会介绍关于这方面的一些例子。 数据源对象的上面是数据绑定管理器,任务是建立HTML控件与数据源对象的连接。这 就是我们所知道的绑定,可以通过设置某些HTML控件的 DATASRO和 DATAFLD属性来实现 下面将对这些内容进行讨论,并示范如何在浏览器中方便地使用数据 10.23支持RDS的浏览器 要知道RDS是微软的技术,因此只能在微软的浏览器上工作。实际上,只有在IE40或更 高版本的浏览器中才完全支持RDS。 当编写依赖于RDS的应用程序时,需要注意访问应用程序的客户的RDS版本可能会与服 务器端有所不同。举例来说,IE4中的是RDS1.5版本,而IE5、 Office2000和 Visual studio6 中的则是RDS20版本。有两种方法可以处理这种兼容性问题 确保所有用户已经升级到RDS的最新版本。如果客户运行的是 Windows2000,那么已经 在运行最新版本的RDS了。否则,可以从网址www.microsoftcom/data处下载。RDS 25版本是目前最新的随同 Windows2000一起发布的版本,同时也是一个可单独下载的 软件包。 ·当连接到数据源时,指定数据工厂的模式。这可以指定使用的是哪一个版本的RDS组件, 后面将介绍这方面的一个例子 10.24数据源对象 数据源对象是一个存储和管理客户端数据的客户端对象。因为这是使用RDS最简单的一 种方式,首先研究一下这些对象 里有几个不同的数据源对象,每一个都针对不同类型的数据: 表格数据控件( Tabular data control,TDC),用于处理表格形式或分隔形式的文本文件 ·RDS数据控件,用于连接 OLE DB数据存储,能够指定连接到哪个数据存储,以及返回 哪些数据。 Java数据库连接器,这是一个通过Java数据库控件( Java Data Base Control,JDBC)连接 到数据存储的Java小程序。这里我们不想讨论JDBC,因为它并不提供其他控件无法实 现的功能 微软的HTML( MSHTML)数据源对象用HTML标记数据,并把它作为数据源
10.2.2 RDS客户组件 在客户端先从底端的 D a t a S p a c e对象开始,该对象作为客户端的一部分与数据工厂或自定 义对象协同工作。D a t a S p a c e对象是一个代理对象,负责与服务器进行通信,同时也是数据传 输的通道 (或通常所说的调度 )。D a t a S p a c e对象是用客户端脚本语言或用 H T M L语言中的 <O B J E C T>标记创建的C O M对象。在本章后面会看到关于这方面的例子。 D a t a S p a c e对象上面是数据源对象 (Data Source Object,D S O ),负责存储客户端数据。一 个数据源对象包含一个 A D O数据记录集,与客户数据缓存共同管理数据。客户数据缓存只是 一种管理客户端数据的客户光标服务。同时数据源对象又是一个 C O M对象,与D a t a S p a c e对象 类似,也可以通过客户端脚本或使用 H T M L语言中的<O B J E C T>标记来创建。同样,在本章 稍后也会介绍关于这方面的一些例子。 数据源对象的上面是数据绑定管理器,任务是建立 H T M L控件与数据源对象的连接。这 就是我们所知道的绑定,可以通过设置某些 H T M L控件的D ATA S R C和D ATA F L D属性来实现。 下面将对这些内容进行讨论,并示范如何在浏览器中方便地使用数据。 10.2.3 支持R D S的浏览器 要知道R D S是微软的技术,因此只能在微软的浏览器上工作。实际上,只有在 IE 4.0或更 高版本的浏览器中才完全支持 R D S。 当编写依赖于 R D S的应用程序时,需要注意访问应用程序的客户的 R D S版本可能会与服 务器端有所不同。举例来说, IE 4中的是RDS 1.5版本,而IE 5、O ffice 2000和Visual Studio 6 中的则是RDS 2.0版本。有两种方法可以处理这种兼容性问题: • 确保所有用户已经升级到R D S的最新版本。如果客户运行的是 Windows 2000,那么已经 在运行最新版本的 R D S了。否则,可以从网址 w w w.microsoft.com/data 处下载。R D S 2 . 5版本是目前最新的随同 Windows 2000一起发布的版本,同时也是一个可单独下载的 软件包。 • 当连接到数据源时,指定数据工厂的模式。这可以指定使用的是哪一个版本的 R D S组件, 后面将介绍这方面的一个例子。 10.2.4 数据源对象 数据源对象是一个存储和管理客户端数据的客户端对象。因为这是使用 R D S最简单的一 种方式,首先研究一下这些对象。 这里有几个不同的数据源对象,每一个都针对不同类型的数据: • 表格数据控件( Tabular Data Control,T D C ),用于处理表格形式或分隔形式的文本文件。 • R D S数据控件,用于连接 OLE DB数据存储,能够指定连接到哪个数据存储,以及返回 哪些数据。 • J a v a数据库连接器,这是一个通过 J a v a数据库控件(Java DataBase Control,J D B C )连接 到数据存储的 J a v a小程序。这里我们不想讨论 J D B C,因为它并不提供其他控件无法实 现的功能。 • 微软的H T M L ( M S H T M L )数据源对象用H T M L标记数据,并把它作为数据源。 第1 0章 A S P与客户端数据计计301 下载
302 ASP3高级编程 Chinaopub.com 下载 XML数据源对象使用ⅹML数据,用于结构化的或任意结构的ⅹML 选用哪一种数据源对象取决于你想做什么,以及数据从哪里来。如果需要向客户提供 少量的数据,并且不允许用户修改数据,那么表格数据控件(TDC)可能会比较适合。这种 数据源是一个文本文件,不需要任何数据库,因此编辑起来比较简单。对于从数据库中取 出数据并且可能需要更新的情况,RDS数据控件是最合适的。而对于许多新数据源,会发 现此时需要使用ⅹML数据控件。这实际依赖于所使用的Wεb应用程序的类型,以及用户所 需的功能 我们将依次介绍这些数据控件,一旦了解了如何用它们把数据传送到客户端,将会介绍 如何使用这些数据 表格数据控件 表格数据控件( Tabular data control,TDC)是最简单的数据源对象,主要用于少量的只读 数据,特别是那些从不改变或很少修改的,不需要从客户端进行更新的静态数据。例如,表 格数据控件能提供一个网页内的菜单项或链接的列表 通过在HTML代码中使用标记可以创建一个表格数据控件。参数 AtauRO可 以指定包含文本数据的文件名 TDC只读取表格中的数据或标记为表格形式的数据,例如,可以处理逗号分隔形式的数 据( Comma Separated value,cSv),类似于下面的数据 172-32-1176"," White,"Bob","408496-7223 213-46-8915"," Green," Marjorie","415986-7020 238-95-7766"," Carson"," Chery1·,415548-7723 267-41-2394","o' Leary"," Michae1·,408286-2428 274-80-9391," Straight',"Dean·,"415834-2919 341-22-1782°, Smith”," Meander","913843-0462 09-56-7008°," Bennet"," Abraham",415658-9932 TDC也可以由自定义。除了 DataURL外,TDC还有16个参数,可以通过设置 OBJECT标记 的参数项或编写脚本代码来配置这些参数。参数的说明如表10-1所示。 表10-1TDC的参数及说明 数据类型 缺省值 AppendData 布尔型 确定新数据是替换还是追加到数据源对象中的现 有数据 CaseSensitive 布尔型 指出字符串比较时是否大小写敏感 True 字符型 指出数据的字符集类型。附录中有字符集的列表 DataURL 字符型 指出数据源文件的URL Escape Char 字符型 指定源文件中使用的转义字符。这些字符位于其他 字符的前面以避免与 Field Delim、 RowDelim或 TextQuali- fier混淆 Field Delim 字符型 指定字段之间的分隔字符 字符型 设置过滤条件 Filtercolumn 字符型 设置过滤的列
• XML数据源对象使用X M L数据,用于结构化的或任意结构的 X M L。 选用哪一种数据源对象取决于你想做什么,以及数据从哪里来。如果需要向客户提供 少量的数据,并且不允许用户修改数据,那么表格数据控件 ( T D C )可能会比较适合。这种 数据源是一个文本文件,不需要任何数据库,因此编辑起来比较简单。对于从数据库中取 出数据并且可能需要更新的情况, R D S数据控件是最合适的。而对于许多新数据源,会发 现此时需要使用 X M L数据控件。这实际依赖于所使用的 We b应用程序的类型,以及用户所 需的功能。 我们将依次介绍这些数据控件,一旦了解了如何用它们把数据传送到客户端,将会介绍 如何使用这些数据。 1. 表格数据控件 表格数据控件( Tabular Data Control,T D C )是最简单的数据源对象,主要用于少量的只读 数据,特别是那些从不改变或很少修改的,不需要从客户端进行更新的静态数据。例如,表 格数据控件能提供一个网页内的菜单项或链接的列表。 通过在H T M L代码中使用<O B J E C T>标记可以创建一个表格数据控件。参数 D a t a U R L可 以指定包含文本数据的文件名。 T D C只读取表格中的数据或标记为表格形式的数据,例如,可以处理逗号分隔形式的数 据(Comma Separated Va l u e,C S V ),类似于下面的数据: T D C也可以由自定义。除了D a t a U R L外,T D C还有1 6个参数,可以通过设置O B J E C T标记 的参数项或编写脚本代码来配置这些参数。参数的说明如表 1 0 - 1所示。 表10-1 TDC的参数及说明 属 性 数据类型 说 明 缺 省 值 A p p e n d D a t a 布尔型 确定新数据是替换还是追加到数据源对象中的现 F a l s e 有数据 C a s e S e n s i t i v e 布尔型 指出字符串比较时是否大小写敏感 Tr u e C h a r S e t 字符型 指出数据的字符集类型。附录中有字符集的列表 Wi n d o w s - 1 2 5 2 D a t a U R L 字符型 指出数据源文件的U R L E s c a p e C h a r 字符型 指定源文件中使用的转义字符。这些字符位于其他 字符的前面以避免与F i e l d D e l i m、R o w D e l i m或Te x t Q u a l i - f i e r混淆 F i e l d D e l i m 字符型 指定字段之间的分隔字符 ,(逗号) F i l t e r 字符型 设置过滤条件 F i l t e r c o l u m n 字符型 设置过滤的列 302计计ASP 3 高级编程 下载
China coM 第10章43与容户端数据303 下载 数据类型 缺省值 Filter Value 字符型 设置过滤的列的值 字符型 指定数据文件使用的语言 en-us(美国英语) 长整型 指出控件的当前状态。可以是以下值: adcReady State Complete(4)表明所有的数据都传 送完毕,或发生了一个错误 adc Ready Statelnteractive(3)表明数据正在传送中 adc Ready State Loaded2)表明控件已被加载并等 待数据传输 这个属性是只读的 Row Delim 指定文本文件中的行分隔符,缺省为回车符 个新行字符 字符型 指出要排序的列的列表。列名前有减号表明是按 降序排序,否则按升序排序 ort Direction 布尔型 如果排序是升序则为True,降序则为 False SortColumn 指定排序的列 字符型 指定封闭文本字段的字符,缺省为双引号 (双引号) UseHeader 布尔型 表明文本文件中首行是否包含列名 下面是使用参数创建TDC的一个例子。 也可以在客户端脚本中获取数据,下面的例子显示了给TDC加载数据的 JScript脚本。 function fillTDC( asoAuthors =‘ authors,csv'; dsoAuthors Re 如果改变了TDC的 DataURL参数,必须使用 Reset方法,这样才能使新的URL起作用。当 介绍数据绑定时,会更详细地讨论如何使用它。 Reset方法是TDC唯一的一个方法。 2.RDS数据控件 RDS数据控件能够访问一般的数据存储,而不是平面文件。它通常用于连接SQL数据库 以从表、査询或存储过程获取数据。与TDC不同,RDS数据控件允许更新数据。在本章稍后 通过示例说明如何进行数据更新 类似于TDC,可以用HTML脚本中的 OBJECT标记来创建一个RDS数据控件,并以类似的 方式设置其属性 NAME="Connect. vALUE="Connection string> AME=· Server· VALUE=" Server Name"> NAMER'SQL" VALUE= 'Query Text> 同样,注意定制数据控件时参数的使用方法。上面的例子显示了最常见的设置方法。和 TDC一样,还有很多其他可以设置的参数,如表10-2所示
(续) 属 性 数据类型 说 明 缺 省 值 F i l t e r Va l u e 字符型 设置过滤的列的值 L a n g u a g e 字符型 指定数据文件使用的语言 en-us(美国英语) R e a d y S t a t e 长整型 指出控件的当前状态。可以是以下值: adcReadyStateComplete(4) 表明所有的数据都传 送完毕,或发生了一个错误 adcReadyStateInteractive(3) 表明数据正在传送中 adcReadyStateLoaded(2) 表明控件已被加载并等 待数据传输 这个属性是只读的 R o w D e l i m 字符型 指定文本文件中的行分隔符,缺省为回车符 一个新行字符 S o r t 字符型 指出要排序的列的列表。列名前有减号表明是按 降序排序,否则按升序排序 S o r t D i r e c t i o n 布尔型 如果排序是升序则为Tr u e,降序则为F a l s e S o r t C o l u m n 字符型 指定排序的列 Te x t Q u a l i f i e r 字符型 指定封闭文本字段的字符,缺省为双引号 " (双引号) U s e H e a d e r 布尔型 表明文本文件中首行是否包含列名 F a l s e 下面是使用参数创建T D C的一个例子。 也可以在客户端脚本中获取数据,下面的例子显示了给 T D C加载数据的J S c r i p t脚本。 如果改变了T D C的D a t a U R L参数,必须使用R e s e t方法,这样才能使新的 U R L起作用。当 介绍数据绑定时,会更详细地讨论如何使用它。 R e s e t方法是T D C唯一的一个方法。 2. RDS数据控件 R D S数据控件能够访问一般的数据存储,而不是平面文件。它通常用于连接 S Q L数据库 以从表、查询或存储过程获取数据。与 T D C不同,R D S数据控件允许更新数据。在本章稍后 通过示例说明如何进行数据更新。 类似于T D C,可以用H T M L脚本中的O B J E C T标记来创建一个R D S数据控件,并以类似的 方式设置其属性。 同样,注意定制数据控件时参数的使用方法。上面的例子显示了最常见的设置方法。和 T D C一样,还有很多其他可以设置的参数,如表 1 0 - 2所示。 第1 0章 A S P与客户端数据计计303 下载
304 3高级编程 Chinapub.com 下载 表10-2RDS数据控件的参数及说明 数据类型 缺省值 Connect 字符型 一个标识数据存储的ADO连接字符串 长整型 以是以下值之一: adc ExecAsync(2)异步执行 FetchOptions 长整型 获取数据的方式,可以是以下值: adc FetchAsync lUp Fronti(1)先取数据,然后将 控制交给应用程序 d(2)先立即取得第 批数据,剩余的数据在后台获取 adcFetchAsync(3)在后台获取所有的数据 字符型 Filter Criterion 字符型 指定过滤的条件。可以是以下运算符 小于等于) =(等于) 于等于) >(大于) >(不等于) Filter Value 字符型 过滤的值 Handler 字符型 自定义的数据处理器的名称和参数 MSDFMAP Handler 长整型 在错误发生前等待的时间(毫秒为单位)30000 长整型 控件的当前状态,可以是以下值: 数据都传送完毕,或发生了一个错误 adc Ready Statelnteractive(3)表明数据仍 然在传送中 adc Ready Stateloaded(2)表明控件己被 记录集型 数据控件访问的ADO数据记录集。该参 数据所在的服务器的名称。为了安全 必须与提供Web页面的服务器同名。可以 是一个标准URL,也可以是机器名称(如果 Sortcolumn 型 排序的列名 明排序是否为升序 字符型 将控件的基础记录集设置为一个现有的 录集。该属性只写 SQ 字符型 数据的SQL字符串 URL 字符型 数据源的URL 异步执行是指在后台检索数据,可以在全部数据返回之前在Web页面上使用已经
表10-2 RDS数据控件的参数及说明 属 性 数 据 类 型 说 明 缺 省 值 C o n n e c t 字符型 一个标识数据存储的A D O连接字符串 E x e c u t e O p t i o n s 长整型 指出命令是异步执行还是同步执行。可 a d c E x e c A s y n c 以是以下值之一: adcExecSync(1) 同步执行(缺省值) a d c E x e c A s y n c ( 2 )异步执行 F e t c h O p t i o n s 长整型 获取数据的方式,可以是以下值: a d c F e t c h A s y n c adcFetchUpFront(1) 先取数据,然后将 控制交给应用程序 a d c F e t c h B a c k g r o u n d ( 2 )先立即取得第一 批数据,剩余的数据在后台获取 a d c F e t c h A s y n c ( 3 )在后台获取所有的数据 F i l t e r C o l u m n 字符型 指定被过滤的列 F i l t e r C r i t e r i o n 字符型 指定过滤的条件。可以是以下运算符: = (大于等于) > (大于) (不等于) F i l t e r Va l u e 字符型 过滤的值 H a n d l e r 字符型 自定义的数据处理器的名称和参数 M S D F M A P. H a n d l e r I n t e r n e t Ti m e o u t 长整型 在错误发生前等待的时间(毫秒为单位) 3 0 0 0 0 0 R e a d y S t a t e 长整型 控件的当前状态,可以是以下值: adcReadyStateComplete (4) 表明所有的 数据都传送完毕,或发生了一个错误 adcReadyStateInteractive(3) 表明数据仍 然在传送中 adcReadyStateLoaded(2) 表明控件已被 加载并等待数据传输 R e c o r d s e t 记录集型 数据控件访问的A D O数据记录集。该参 数只读 S e r v e r 字符型 数据所在的服务器的名称。为了安全, 必须与提供 We b页面的服务器同名。可以 是一个标准U R L,也可以是机器名称(如果 使用D C O M ) S o r t C o l u m n 字符型 排序的列名 S o r t D i r e c t i o n 布尔型 表明排序是否为升序 S o u r c e R e c o r d s e t 字符型 将控件的基础记录集设置为一个现有的 记录集。该属性只写 S Q L 字符型 获取数据的S Q L字符串 U R L 字符型 数据源的U R L 异步执行是指在后台检索数据,可以在全部数据返回之前在 We b页面上使用已经 304计计ASP 3 高级编程 下载
第10章4与客户端经据305 下载 得到的数据。虽然可能需要的是全部的数据,但异步工作至少可提前开始处理数据 也可让用户先看到某些内容,这使得Web站点看上去响应能力更强。 与TDC类似,RDS数据控件可以通过设置 OBJECT标记的参数或编写代码来设置其属性。 下面举一个例子: OBJECT CLASSID= :BD96c556-65A3-11D0-983A-00c04Fc29E33 WIDTH=”0· HEIGHT=0”> E PARAM NAMEm autho function window. onload( dsoAuthors. Server =.w2000 dsoAuthors. SQL="SELECT FROM Authors dsoAuthors. Refresh()i 这里为 Connect参数使用了一个DSN,因为这非常适合该页面,但也可以是任何 有效的ADO连接字符串 URL是ADO2.5版提供的新特性,允许使用一个文件作为数据源。该文件可以有两种格式: 一种是用 Recordset. Save方法保存的记录集:另一种是一个ASP页面,它创建一个记录集,然 后将其保存在一个流中。代码如下 文件 DatePage. asp包含以下 VBScript代码 Dim rdAta et rsData Server Createobject("ADODB. Recordset) ROM Authors, strConn e Response adPersistXML Nothing 这只是创建了一个记录集,然后用Save方法将记录集以XML格式保存到 Response对象中 在ADO的早期版本中,只能将记录集存为物理文件,而ADO2.5版本能够直接将其存为流 这个ASP页面的结果就是XML格式的记录集。下一章将研究关于流和XML数据的所有主题 使用URL属性优于使用 Connect和SQL属性,其最大优点是:在用户可以看到的网页中不 会出现连接的细节。考虑下面的对象定义
得到的数据。虽然可能需要的是全部的数据,但异步工作至少可提前开始处理数据。 也可让用户先看到某些内容,这使得 We b站点看上去响应能力更强。 与T D C类似,R D S数据控件可以通过设置 O B J E C T标记的参数或编写代码来设置其属性。 下面举一个例子: 等效于: 这里为C o n n e c t参数使用了一个 D S N,因为这非常适合该页面,但也可以是任何 有效的A D O连接字符串。 U R L是ADO 2.5版提供的新特性,允许使用一个文件作为数据源。该文件可以有两种格式: 一种是用R e c o r d s e t . S a v e方法保存的记录集;另一种是一个 A S P页面,它创建一个记录集,然 后将其保存在一个流中。代码如下: 文件D a t e P a g e . a s p包含以下V B S c r i p t代码: 这只是创建了一个记录集,然后用 S a v e方法将记录集以X M L格式保存到R e s p o n s e对象中。 在A D O的早期版本中,只能将记录集存为物理文件,而 ADO 2.5版本能够直接将其存为流。 这个A S P页面的结果就是X M L格式的记录集。下一章将研究关于流和 X M L数据的所有主题。 使用U R L属性优于使用C o n n e c t和S Q L属性,其最大优点是:在用户可以看到的网页中不 会出现连接的细节。考虑下面的对象定义: 第1 0章 A S P与客户端数据计计305 下载
306Asp高箱程 China-pub.com 下载 "c1sid:BD96c556-65A3-11D0-983A-00c04Fc29E33 Server PARAM NAME="SQL. VALUE="SELECT FROM Authors 第一行显示了连接的细节。此时能够看到DSN为pubs,并且我们选择了 authors表的全部 列。这无疑为电脑黑客进入Web站点提供了潜在的路径,因为他们知道了服务器的名称以及 数据库的一些细节。现在,考虑一下使用URL属性的情况 /OBJECT> 现在,用户所见到的是一个ASP网页的URL地址,没有任何有关服务器和数据库的详细 信息。 使用 CONNECT/SQL属性的方法,用户可以清楚地见到连接的细节,而使用 URL所见的却是数据。从这一点上来说,消除了一个安全问题 在脚本中设置RDS数据控件的属性时,必须使用 Refesh方法,如下所示 function window. onload() SOAuthors. URL=DataPage. asp dsoAuthors. Refresh()i 这将强迫数据控件使用新的属性值,并重新从数据提供者那里检索数据。除了 Refresh方 法外,RDS数据控件还有许多其他方法,如表10-3所示 表10-3RDS数据控制的方法及说明 Cancel 取消任何异步操作 CancelUpdate 取消对数据的任何修改 Create Recordset 创建一个空的记录集,这允许在本地创建新的数据集 MoveFirst 移到第一条记录 MoveLast 移到最后一条记录 移到下一条记录 Move Previous 移到上一条记录 更新来自数据存储的数据 应用过滤或排序条件 Submitchanges 将所有未解决的修改送回数据存储 在本章后面,会见到大多数方法的使用情况 3. MSHTML数据控件 微软HTML( MSHTML)数据控件比较特别的地方在于: MSHTML是IE的一个组成部分
第一行显示了连接的细节。此时能够看到 D S N为p u b s,并且我们选择了 a u t h o r s表的全部 列。这无疑为电脑黑客进入 We b站点提供了潜在的路径,因为他们知道了服务器的名称以及 数据库的一些细节。现在,考虑一下使用 U R L属性的情况: 现在,用户所见到的是一个 A S P网页的U R L地址,没有任何有关服务器和数据库的详细 信息。 使用C O N N E C T / S Q L属性的方法,用户可以清楚地见到连接的细节,而使用 U R L所见的却是数据。从这一点上来说,消除了一个安全问题。 在脚本中设置R D S数据控件的属性时,必须使用 R e f e s h方法,如下所示: 这将强迫数据控件使用新的属性值,并重新从数据提供者那里检索数据。除了 R e f r e s h方 法外,R D S数据控件还有许多其他方法,如表 1 0 - 3所示。 表10-3 RDS数据控制的方法及说明 方 法 说 明 C a n c e l 取消任何异步操作 C a n c e l U p d a t e 取消对数据的任何修改 C r e a t e R e c o r d s e t 创建一个空的记录集,这允许在本地创建新的数据集 M o v e F i r s t 移到第一条记录 M o v e L a s t 移到最后一条记录 M o v e N e x t 移到下一条记录 M o v e P r e v i o u s 移到上一条记录 R e f r e s h 更新来自数据存储的数据 R e s e t 应用过滤或排序条件 S u b m i t C h a n g e s 将所有未解决的修改送回数据存储 在本章后面,会见到大多数方法的使用情况。 3. MSHTML数据控件 微软H T M L ( M S H T M L )数据控件比较特别的地方在于: M S H T M L是I E的一个组成部分, 306计计ASP 3 高级编程 下载
第104与客户端数据307 下载 并能提供一个基于HTML文档的数据源。虽然本质上 MSHTML并不是为数据存储使用的一种 格式,但如果确实有许多包含某些数据格式的HTML网页, MSHTML可能会变得较为有用。 使用这个控件的代码如下所示 172-32-1176 white Bob Green Cheryl标记是一个与数据控件功能相似的浏览器HTML标记。在许多情况下与使用 个RDS数据控件类似,但该标记是为处理XML数据而特别设计的。使用的方式有二种 第一种是使用SRC属性来指定数据的位置。 这表示使用文件 Authors xml作为数据源。 另外,也可在标记中嵌入XML white Johnson408496-7223 213-46-8915Green
并能提供一个基于 H T M L文档的数据源。虽然本质上 M S H T M L并不是为数据存储使用的一种 格式,但如果确实有许多包含某些数据格式的 H T M L网页,M S H T M L可能会变得较为有用。 使用这个控件的代码如下所示: 为了能使用这个控件,必须为 H T M L标记指定I D属性,因为正是 I D属性确定了字段的名 称。例如: 读者会注意到这看起来不太漂亮。是的,但正是这样才可以说明 H T M L标记的名称是无 关紧要的,I D才是重要的。使用MSHTML DSO解析时,上面的H T M L脚本将会产生两行数据, 每一行有三个字段。最后会得到类似于表 1 0 - 4的数据。 字段是由I D属性确定的。如果一个标记 的I D与现有的I D相同,那么这个标记的数据 将成为新的一行,否则在相同的行中创建一 个新的字段。 与 已 经 讨 论 过 的 数 据 控 件 类 似 , M S H T M L数据控件有一个R e c o r d s e t属性,这也是该控件唯一的一个属性。 M S H T M L数据控件 没有方法。 4. XML数据控件 我们已经知道了一种将 X M L数据放入R D S控件的方法,即使用 R D S数据控件和U R L属性 从A S P文件中获取X M L数据。另外一种方法是使用 XML Data Island(XML数据岛),这需要使 用X M L标记。在这里简要地提一下这个问题,因为在下一章会讨论处理 X M L数据的细节。 <X M L>标记是一个与数据控件功能相似的浏览器 H T M L标记。在许多情况下与使用一 个R D S数据控件类似,但该标记是为处理 X M L数据而特别设计的。使用的方式有二种。 第一种是使用S R C属性来指定数据的位置。 这表示使用文件A u t h o r s . x m l作为数据源。 另外,也可在标记中嵌入X M L。 第1 0章 A S P与客户端数据计计307 下载 表10-4 HTML脚本产生的数据 a u _ i d a u _ l n a m e A u _ f n a m e 1 7 2 - 3 2 - 11 7 6 W h i t e B o b 2 1 3 - 4 6 - 8 9 1 5 G r e e n C h e r y l
308A5p3高箱程 China-pub.com 下载 Marjorie SOAuthors" DATAFLDmau lname"> 这里, dsoAuthors是一个标准的RDS数据控件。我们创建了两个DIV元素,并通过设置属 性 DATASRO指向先前定义的数据控件。然后设置属性 DATAFLD为字段名,在本例中为 au_ fname和au_name。这就是数据绑定的全部过程。其结果如图10-2所示。 需要记住一个重要事情是文本输出( Johnson和 ORDsSimgle nding ap. Hi可 White)根本没有在HTML脚本中出现。实际上HTML Favorites Tool Heb 只由以上显示的内容组成 Data Binding with RDs 因此,数据绑定就是数据控件管理远程数“m 据源的数据,同时HTML元素使用该数据并将其[m30司 显示在屏幕上的能力 吧Don 厂查Loe 除此之外,HTML元素还有第三个属性 图10-2数据绑定结果 DATAFORMATAS,可以是HTML或TEXT,表示如何格式化字段中的数据。缺省为TEXT, 但如果需要HTML格式的数据,可以通过数据绑定将其格式化,例如下面的文本文件。 Desc The he wrox Conferences logo
我们将在下一章详细讨论X M L数据控件。 10.2.5 数据绑定 迄今为止,已经可以用几个不同的 R D S数据控件将数据送到客户端,但还没有介绍当数 据到达客户端后,如何处理数据。实际上,这些数据控件负责的是数据的存储及管理,并不 真正地显示数据。因此,问题在于如何将数据从数据控件中取出,并将其提供给 H T M L元素, 使用户能够见到数据。 使用客户端数据最简单的方法是将数据与 H T M L标记绑定。绑定就是在H T M L元素和数据 控件之间建立一种联系。数据控件主要负责管理数据,并为 H T M L元素提供数据,而H T M L元 素则将数据显示在屏幕上。 为了将数据源与H T M L元素绑定,需要设置两个属性: • DATA S R C,确定包含数据的数据控件。在数据源名称前总是要加上一个“ #”。 • D ATA F L D,确定绑定数据控件中的哪个字段。这些字段是数据控件管理的数据中的列 名。因此对于一个数据库,就是表中的列名。 例如: 这里,d s o A u t h o r s是一个标准的R D S数据控件。我们创建了两个 D I V元素,并通过设置属 性D ATA S R C指向先前定义的数据控件。然后设置属性 D ATA F L D为字段名,在本例中为 a u _ f n a m e和a u _ l n a m e。这就是数据绑定的全部过程。其结果如图 1 0 - 2所示。 需要记住一个重要事情是文本输出 ( J o h n s o n和 W h i t e )根本没有在H T M L脚本中出现。实际上 H T M L 只由以上显示的内容组成。 因此,数据绑定就是数据控件管理远程数 据源的数据,同时 H T M L元素使用该数据并将其 显示在屏幕上的能力。 除 此 之 外 , H T M L元 素 还 有 第 三 个 属 性 : D ATA F O R M ATA S,可以是H T M L或T E X T,表示如何格式化字段中的数据。缺省为 T E X T, 但如果需要H T M L格式的数据,可以通过数据绑定将其格式化,例如下面的文本文件。 308计计ASP 3 高级编程 下载 图10-2 数据绑定结果