分享
 
 
 

ASP 3.0高级编程(四十四)

王朝asp·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

第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说明了这些组件以及它们之间是如何协同工作的。

组件似乎很多,但并不是所有的组件在每种情形下都被使用,实际上有一些不是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标记的参数项或编写脚本代码来配置这些参数。

属 性

数据类型

说 明

缺 省 值

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一样,还有很多其他可以设置的参数属 性

数据类型

说 明

缺 省 值

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有