设为首页
加入收藏
帮助中心
首页 | 红盾通告 | 信息中心 | ASP技术 | 数据库 | 网页设计 | 网管专栏 | OICQ攻略 | 墨客频道 | 网站运营 |
当前位置:首页 >> ASP技术 >> ASP基础 >> 正文
最新信息
·关于Response.ContentType…
·Request.ServerVariables参…
·让你知道codepage的重要
·Global.asa文件用法大全
·FormatCurrency函数详细用…
·使用Formatnumber()与Form…
·FormatDateTime函数的详细…
·Record记录集的操作方法
·在ASP中使用数据库
·ASP六大对象介绍
资料搜索
热点信息
·如何使Asp页面强制清除缓存…
·常用ASCII 码对照表
·使用Formatnumber()与Form…
·让你知道codepage的重要
·FormatDateTime函数的详细…
·FormatCurrency函数详细用…
·ASP错误代码总结
·Record记录集的操作方法
·Request.ServerVariables参…
·Global.asa文件用法大全
推荐信息
·(ADODB.Command)对象的用法…
·ASP错误代码总结
·ASP教程之ASP基础简介
·ASP VBScript 函数速查表
·关于Response.ContentType…
·Request.ServerVariables参…
·asp关键字函数运算附
·Asp基础教程(上)
·ADO 物件的方法與屬性
·常用ASCII 码对照表


Google
 
ASP 3.0高级编程(四十四)
〖编辑:Cloudy | 浏览:人次〗

第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.2 远程数据服务
远程数据服务(Remote Data Services,RDS)是允许我们处理客户端数据的一系列服务的统称。现在不用担心这方面的问题,因为RDS本身就是ADO的一部分,只有在需要传送和使用客户端数据时,才会使用。实际上RDS是由几个组件构成的。图10-1说明了这些组件以及它们之间是如何协同工作的。
图10-1 RDS的组件构成
组件似乎很多,但并不是所有的组件在每种情形下都被使用,实际上有一些不是RDS的一部分。然而这里还是把所有可能出现的组件都放在了图上,以备需要时查看。图10-1分成了两部分,因为使用客户端数据需要一些向客户端传送数据的方法,同时数据一旦到达客户端,也需要一些管理数据的方法。我们先从服务器端开始。

10.2.1 RDS服务器组件
虽然RDS用于传送和访问客户端数据,但其确实有一些基于服务器的组件。这是必需的,因为肯定需要某种方式将数据传送到客户端。因此有了一系列能访问数据并允许发送数据到客户端的服务器组件。我们把实际的数据传送称为调度(marshal)。
服务器端组件图的最上端是数据存储,由OLE DB提供者访问。它并不是RDS的一部分,但这表示只要有相应的OLE DB提供者,就可以通过RDS在客户端使用任何数据。至于如何处理服务器上的数据,可以有两种选择:
· 数据工厂(DataFactory)是缺省的用于访问数据存储的服务器端组件。它作为服务器端RDS组件的一部分安装在计算机上,除了能从数据存储中获取数据外,还为服务器处理发送到客户端以及从客户端发送来的数据。
· 自定义组件只是一个普通的提供了数据传送方法的COM组件。当数据工厂不能提供所需的功能时,可以使用自定义组件。本章将介绍一个简单的组件例子,在本书的后面还有一个更复杂的例子。
Web服务器使用这两种组件作为客户和服务器数据的接口。

10.2.2 RDS客户组件
在客户端先从底端的DataSpace对象开始,该对象作为客户端的一部分与数据工厂或自定义对象协同工作。DataSpace对象是一个代理对象,负责与服务器进行通信,同时也是数据传输的通道(或者通常所说的调度)。DataSpace对象是用客户端脚本语言或用HTML语言中的<OBJECT>标记创建的COM对象。在本章后面会看到关于这方面的例子。
DataSpace对象上面是数据源对象(Data Source Object,DSO),负责存储客户端数据。一个数据源对象包含一个ADO数据记录集,与客户数据缓存共同管理数据。客户数据缓存只是一种管理客户端数据的客户光标服务。同时数据源对象又是一个COM对象,与DataSpace对象类似,也可以通过客户端脚本或使用HTML语言中的<OBJECT>标记来创建。同样,在本章稍后也会介绍关于这方面的一些例子。
数据源对象的上面是数据绑定管理器,任务是建立HTML控件与数据源对象的连接。这就是我们所知道的绑定,可以通过设置某些HTML控件的DATASRC和DATAFLD属性来实现。下面将对这些内容进行讨论,并示范如何在浏览器中方便地使用数据。

10.2.3 支持RDS的浏览器
要知道RDS是微软的技术,因此只能在微软的浏览器上工作。实际上,只有在IE 4.0或更高版本的浏览器中才完全支持RDS。
当编写依赖于RDS的应用程序时,需要注意访问应用程序的客户的RDS版本可能与服务器端有所不同。举例来说,IE 4中的是RDS 1.5版本,而IE 5、Office 2000和Visual Studio 6中的则是RDS 2.0版本。有两种方法可以处理这种兼容性问题:
· 确保所有用户已经升级到RDS的最新版本。如果客户运行的是Windows 2000,那么已经在运行最新版本的RDS了。否则,可以从网址www.microsoft.com/data处下载。RDS 2.5版本是目前最新的随同Windows 2000一起发布的版本,同时也是一个可单独下载的软件包。
· 当连接到数据源时,指定数据工厂的模式。这可以指定使用的是哪一个版本的RDS组件,后面将介绍这方面的一个例子。

10.2.4 数据源对象
数据源对象是一个存储和管理客户端数据的客户端对象。因为这是使用RDS最简单的一种方式,首先研究一下这些对象。
这里有几个不同的数据源对象,每一个都针对不同类型的数据:
· 表格数据控件(Tabular Data Control,TDC),用于处理表格形式或分隔形式的文本文件。
· RDS数据控件,用于连接OLE DB数据存储,能够指定连接到哪个数据存储,以及返回哪些数据。
· Java数据库连接器,这是一个通过Java数据库控件(Java DataBase Control,JDBC)连接到数据存储的Java小程序。这里我们不想讨论JDBC,因为它并不提供其他控件无法实现的功能。
· 微软的HTML(MSHTML)数据源对象用HTML标记数据,并把它作为数据源。
· XML数据源对象使用XML数据,用于结构化的或任意结构的XML。
选用哪一种数据源对象取决于你想做什么,以及数据从哪里来。如果需要向客户提供少量的数据,并且不允许用户修改数据,那么表格数据控件(TDC)可能会比较适合。这种数据源是一个文本文件,不需要任何数据库,因此编辑起来比较简单。对于从数据库中取出数据并且可能需要更新的情况,RDS数据控件是最合适的。而对于许多新数据源,会发现此时需要使用XML数据控件。这实际依赖于所使用的Web应用程序的类型,以及用户所需的功能。
我们将依次介绍这些数据控件,一旦了解了如何用它们把数据传送到客户端,将会介绍如何使用这些数据。
1. 表格数据控件
表格数据控件(Tabular Data Control,TDC)是最简单的数据源对象,主要用于少量的只读数据,特别是那些从不改变或很少修改的,不需要从客户端进行更新的静态数据。例如,表格数据控件能提供一个网页内的菜单项或链接的列表。
通过在HTML代码中使用<OBJECT>标记可以创建一个表格数据控件。参数DataURL可以指定包含文本数据的文件名。
<OBJECT CLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83"
ID="dsoAuthors" WIDTH="0" HEIGHT="0">
<PARAM NAME="DataURL" VALUE="Authors.csv">
</OBJECT>
TDC只读取表格中的数据或标记为表格形式的数据,例如,可以处理逗号分隔形式的数据(Comma Separated Value, CSV),类似于下面的数据:
"172-32-1176","White","Bob","408 496-7223"
"219-46-8915","Green","Marjorie","415 986-7020"
"238-95-7766","Carson","Cheryl","415 548-7723"
"267-41-2394","O'Leary","Michael","408 286-2428"
"274-80-9391","Straight","Dean","415 834-2919"
"341-22-1782","Smith","Meander","913 843-0462"
"409-56-7008","Bennet","Abraham","415 658-9932"
TDC也可以自由定义。除了DataURL外,TDC还有16个参数,可以通过设置OBJECT标记的参数项或编写脚本代码来配置这些参数。参数的说明如表10-1所示:
表10-1 TDC的参数及说明
属 性
数据类型
说 明
缺 省 值

AppendData
布尔型
确定新数据是替换还是追加到数据源对象中的现有数据
False

CaseSensitive
布尔型
指出字符串比较时是否大小写敏感
True

CharSet
字符型
指出数据的字符集类型。附录中字符集的列表
Windows-1252

DataURL
字符型
指出数据源文件的URL


EscapeChar
字符型
指定源文件中使用的转义字符。这些字符位于其他字符的前面以避免与FieldDelim、RomDelim或TextQualifier混淆


FieldDelim
字符型
指定字段之间的分隔字符
,(逗号)

Filter
字符型
设置过滤条件


Filtercolumn
字符型
设置过滤的列


FilterValue
字符型
设置过滤的列的值


Language
字符型
指定数据文件使用的语言
en-us(美国英语)

ReadyState
长整型
指出控件的当前状态。可以是以下值:adcReadyStateComplete(4)表明所有的数据都传送完毕,或发生了一个错误
adcReadyStateInteractive(3)表明数据正在传送中
adcReadyStateLoaded(2)表明控件已被加载并等待数据传输
这个属性是只读的


RowDelim
字符型
指定文本文件中的行分隔符,缺省为回车符
一个新行字符

Sort
字符型
指出要排序的列的列表。列名前有减号表明是按降序排序,否则按升序排序


SortDirection
布尔型
如果排序是升序则为True,降序则为False


SortColumn
字符型
指定排序的列


TextQualifier
字符型
指定封闭文本字段的字符,缺省为双引号
"(双引号)

UseHeader
布尔型
表明文本文件中首行是否包含列名
False

下面是使用参数创建TDC的一个例子。
<OBJECT CLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83"
ID="dsoAuthors" WIDTH="0" HEIGHT="0">
<PARAM NAME="DataURL" VALUE="Authors.csv">
</OBJECT>
也可以在客户端脚本中获取数据,下面的例子显示了给TDC加载数据的JScript脚本。
function fillTDC()
{
dsoAuthors.dataURL = 'authors.csv';
dsoAuthors.Reset();
}
如果改变了TDC的DataURL参数,必须使用Reset方法,这样才能使新的URL起作用。当介绍数据绑定时,会更详细地讨论如何使用它。Reset方法是TDC唯一的一个方法。
2. RDS数据控件
RDS数据控件能够访问一般的数据存储,而不是平面文件。它通常用于连接SQL数据库以从表、查询或存储过程获取数据。与TDC不同,RDS数据控件允许更新数据。在本章稍后通过示例说明如何进行数据更新。
类似于TDC,可以用HTML脚本中的OBJECT标记来创建一个RDS数据控件,并以类似的方式设置其属性。
<OBJECT CLASSID='clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"
ID="dsoAuthors" WIDTH="0" HEIGHT="0">
<PARAM NAME="Connect" VALUE="Connection String">
<PARAM NAME="Server" VALUE="Server Name">
<PARAM NAME="SQL" VALUE="Query Text">
</OBJECT>
同样,注意定制数据控件时参数的使用方法。上面的例子显示了最常见的设置方法。和TDC一样,还有很多其他可以设置的参数,如表10-2所示:
表10-2 RDS数据控件的参数及说明
属 性
数据类型
说 明
缺 省 值

Connect
字符型
一个标识数据存储的ADO连续字符串


ExecuteOptions
长整型
指出命令是异步执行还是同步执行。可以是以下值之一:
adcExecSync(1)同步执行(缺省值)
adcExecAsync(2)异步执行
adExecAsync

FetchOptions
长整型
获取数据的方式,可以是以下值:
adcFetchUpFront(1)先取数据,然后将控制交给应用程序
adcFetchBackground(2)先立即取得第一批数据,剩余的数据在后台获取
adcFetchAsync(3)在后台获取所有的数据
adcFetchAsync

FilterColumn
字符型
指定被过滤的列


FilterCriterion
字符型
指定过滤的条件。可以是以下运算符:
<(小于)
<=(小于等于)
=(等于)
>=(大于等于)
>(大于)
<>(不等于)


FilterValue
字符型
过滤的值


Handler
字符型
自定义的数据处理器的名称和参数
MSDFMAP.Handler

InternetTimeout
长整型
在错误发生前等待的时间(毫秒为单位)
300000

ReadyState
长整型
控件的当前状态,可以是以下值:
adcReadyStateComplete(4)表明所有的数据都传送完毕,或发生了一个错误
adcReadyStateInteractive(3)表明数据仍然在传送中
adcReadyStateLoaded(2)表明控件已被加载并等待数据传输


Recordset
记录集型
数据控件访问的ADO数据记录集。该参数只读


Server
字符型
数据所在的服务器的名称。为了安全,必须与提供Web页面的服务器同名。可以是一个标准URL,也可以是机器名称(如果使用DCOM)


SortColumn
字符型
排序的列名


SortDirection
布尔型
表明排序是否为升序


SourceRecordset
字符型
将控件的基础记录集设置为一个现有的记录集。该属性只写


SQL
字符型
获取数据的SQL字符串


URL
字符型
数据源的URL


录入时间:2006-07-27 16:27:06 [打印本页] [关闭窗口] [返回顶部]
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

Copyright © 2006-2014 0733168.Com Inc All Rights Reserved
关于我们 | 广告合作 | 联系我们 | 法律声明 | 友情链接 | 意见反馈
本站所收录信息、社区话题、及本站所做之广告均属其个人行为,与本站立场无关
湘ICP备06008436号