日期:2012-03-09  浏览次数:21399 次


     在本章的开始,已经向大家提供了一张RDS的组件框图,确定了哪些组件是客户端的,以及哪些组件是服务器端的。在上一节,集中介绍了客户端组件,即数据控件,因为它们是使用RDS最简单的方法。它们允许从服务器向客户机无缝地传输数据,同时也提供了一种在Web页面上处理数据的简易方法。为了获得服务器上的数据,只需要设置几个属性,调用一、两个方法就足够了。
    使用数据控件存在的问题在于它们获取数据的能力相对有限,即缺乏灵活性。对于RDS数据控件,必须通过参数,比如Connect i o n和SQL,指定连接和查询的细节,这把我们限制在数据库和简单的查询上。此外,用户还能看到这些参数,因此在使用RDS数据控件时存在一个潜在的安全漏洞。虽然属性U R L通过指定实际的数据源,而不是获取数据的场所,部分解决了这个问题,但仍然存在着缺陷。用户依旧可以获取U R L,直接读取数据,而这并不是我们所希望的。
    IE 5.0 的引入使访问X M L数据变得更为容易,因此以后X M L数据肯定会广泛使用。与RDS数据控件的U R L属性一样,用户也能直接读取数据,因为数据源的名称对他们是可见的。
    因此,下面一些问题需要考虑。
    ? 需要一种安全的方法检索服务器端数据,并在客户端使用它们。
    ? 需要一种更新数据的方法。
    ? 不损失灵活性。
    这些问题的解决方法是使用组件。组件允许封装对所有数据的访问,包括数据源,确保只在Web页面上显示数据。可以隐藏连接的细节,因为它们在组件内部,不会暴露给用户,所以安全性不会受到损害。也可以创建自己的组件来更新数据,这样保留了可更新数据的灵
活性。
    此外又增加了安全性,因为在客户端访问服务器组件之前,需要修改注册表。这确保只创建所需的组件,阻止用户上载组件,然后从服务器访问他们。稍后将会看到如何修改注册表。
10.3.1 基于服务器的组件
    在这里并不打算大篇幅地讨论如何创建组件,因为本书后面的部分章节已经覆盖了这些内容,这里将介绍一些十分简单的用于服务器组件的代码。这有助于说明将要使用的RDS例子。
    首先组件由一个定义连接细节的常数开始,在本例中针对SQL Server和p u b s数据库。

    然后创建第一个方法,向客户端Web页面提供一个记录集。这是一个标准的Visual Basic函数,返回一个标准的A D O R e c o RDS e t对象。


    这里有两个重要的地方需要注意。第一是把C u r s o r L o c a t i o n设为a d U s e C l i e n t,确保使用客户光标引擎。这对于断开连接的记录集是必要的。第二点需要注意是下面这一行代码:

    把记录集从服务器端“断开”,安全地将记录集返回给客户端。
    组件的第二个方法用我们对断开的记录集的修改来更新服务器。它接受一个记录集参数,重新连接到数据存储,然后发出U p d a t e B a t c h命令。这将所有批处理修改送到服务器。

    这就是这个组件的全部内容。很明显,我们把它简单化了,这样才能很快地显示其包含的内容,但实际上对于能在组件里放什么并没有任何限制。在本书第1 3章到第1 8章会看到更多的有关如何做以及为什么要这样做的例子。
10.3.2 DataSpace对象
    D a t a S p a c e对象是负责与服务器进行通讯的客户端对象。它的任务是提供一种方法,从客户端创建服务器端组件,同时允许在客户机和服务器之间传输数据。
    虽然听起来有些复杂,但实际上却是非常简单。在Web页面上创建一个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对象有两种方法。第一种方法使用< OBJECT>标记:

    这与过去创建其他客户端RDS组件的方法几乎相同,唯一不同的就是类I D。
    第二种方法是使用脚本代码创建D a t a S p a c e对象。下面的代码显示了如何用J S c r i p t创建一个D a t a S p a c e对象。

    两种方法的主要区别在于:使用< OBJECT>标记时, 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对象创建服务器组件
    一旦创建了D a t a S p a c e对象,可以使用C r e a t e OBJECT方法创建服务器端对象。