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 <PARAM NAME=' Server VALUE"W2000"> <PARAM NAME="SQL VALUE='SELECT FROM Authors 等效于 OBJECT CLASSID=clsid: BD96C556-65A3-11D0-983A-00C04FC29E33 ID=" dsoAuthors· WIDTH=”0· HEIGHT=0"> <SCRIPT LANGUAGE=JScript> function window. onload( dsoAuthors. Server =.w2000 dsoAuthors. SQL="SELECT FROM Authors dsoAuthors. Refresh()i 这里为 Connect参数使用了一个DSN,因为这非常适合该页面,但也可以是任何 有效的ADO连接字符串 URL是ADO2.5版提供的新特性,允许使用一个文件作为数据源。该文件可以有两种格式: 一种是用 Recordset. Save方法保存的记录集:另一种是一个ASP页面,它创建一个记录集,然 后将其保存在一个流中。代码如下 <OBJECT CLASSID=clsid: BD96C556-65A3-11D0-983A-00C04FC29E33 工D=" dsoAuthors, AIDTH="0· HEIGHT=·0> <PARAM NAME="URL VALUE-'DataPage 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属性的情况 <OBTECT CLASSID=clsid: BD96C556-65A3-11D0-983A-00C04FC29E33 PARAM NAME="URL"VALUE=DataPage, asp'> /OBJECT> 现在,用户所见到的是一个ASP网页的URL地址,没有任何有关服务器和数据库的详细 信息。 使用 CONNECT/SQL属性的方法,用户可以清楚地见到连接的细节,而使用 URL所见的却是数据。从这一点上来说,消除了一个安全问题 在脚本中设置RDS数据控件的属性时,必须使用 Refesh方法,如下所示 <SCRIPT LANGUAGE=JScript> 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可能会变得较为有用。 使用这个控件的代码如下所示 < OBJECT ID=" asoAuthors·DAA= Authors.htm1· HEIGHT=”0”WDYH="0· 为了能使用这个控件,必须为HTML标记指定ID属性,因为正是ID属性确定了字段的名 称。例如 < DIV ID="auid">172-32-1176</DIV> <SPAN ID=au lname">white</SPAN> <HI ID='au_fname >Bob</H1> <PRE IDe'auid'2213-46-8915</PRE> <H2 ID="au lname">Green</H2> <H1 ID=au_fname">Cheryl</H1 读者会注意到这看起来不太漂亮。是的,但正是这样才可以说明HTML标记的名称是无 关紧要的,ID才是重要的。使用 MSHTML DSO解析时,上面的HIML脚本将会产生两行数据 每一行有三个字段。最后会得到类似于表10-4的数据 字段是由ID属性确定的。如果一个标记 表104HTML脚本产生的数据 的ID与现有的ID相同,那么这个标记的数据 将成为新的一行,否则在相同的行中创建 au Iname Au fname 个新的字段 172-32-1176 Chery 与已经讨论过的数据控件类似, 213-46-8915 MSHTML数据控件有一个 Recordset属性,这也是该控件唯一的一个属性。 MSHTML数据控件 没有方法。 4.XML数据控件 我们已经知道了一种将XML数据放入RDS控件的方法,即使用RDS数据控件和URL属性 从ASP文件中获取ⅹML数据。另外一种方法是使用ⅹ ML Data Island(XML数据岛),这需要使 用XML标记。在这里简要地提一下这个问题,因为在下一章会讨论处理XML数据的细节 <ⅹML>标记是一个与数据控件功能相似的浏览器HTML标记。在许多情况下与使用 个RDS数据控件类似,但该标记是为处理XML数据而特别设计的。使用的方式有二种 第一种是使用SRC属性来指定数据的位置。 <XML ID='asoAuthors SRC'Authors. xml ></XML> 这表示使用文件 Authors xml作为数据源。 另外,也可在标记中嵌入XML < XML ID=· dsoAuthors·> <auid172-32-1176</auid <au_lname>white</au_lname> <au fname>Johnson</au_frames phone>408496-7223</ phone> </Author> <Author> <auid>213-46-8915</auid au_lname>Green</au_lname>
并能提供一个基于 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 下载 <_ fname>Marjorie</au fname> </XL: 我们将在下一章详细讨论XML数据控件 10.2.5数据绑定 迄今为止,已经可以用几个不同的RDS数据控件将数据送到客户端,但还没有介绍当数 据到达客户端后,如何处理数据。实际上,这些数据控件负责的是数据的存储及管理,并不 真正地显示数据。因此,问题在于如何将数据从数据控件中取出,并将其提供给HTML元素, 使用户能够见到数据 使用客户端数据最简单的方法是将数据与HTML标记绑定。绑定就是在HIML元素和数据 控件之间建立一种联系。数据控件主要负责管理数据,并为HTML元素提供数据,而HTML元 素则将数据显示在屏幕上。 为了将数据源与HTML元素绑定,需要设置两个属性: DATASRO,确定包含数据的数据控件。在数据源名称前总是要加上一个“#”。 DATAFLD,确定绑定数据控件中的哪个字段。这些字段是数据控件管理的数据中的列 名。因此对于一个数据库,就是表中的列名。 例如 <OBJECT CLASSID=clsid: BD96C556-65A3-11D0-983A-00C04FC29E33 ID='asoAutho <PARAM NAME="URL VALUE= Dat <DIV DATASRC="*dsoAuthors" DATAFLD="au fname></DIV> SOAuthors" DATAFLDmau lname"></DIV> 这里, 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, <IMG SRC=logos/WroxconferencesLogo gif>
我们将在下一章详细讨论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 数据绑定结果