图1表示层通常基于HTML输出,并能够很好地与任何较新的浏览器一起工作。网页是在 Web服务器上使用Active Server Pages (ASP)构建的,并且只有在一些相当特殊的情况下才试图通过COM、动态HTML和XML支持来提供浏览器的实际功能。 关键之处是中间层,其中通常有一层或多层业务对象获取并交换数据来响应用户的输入。这些组件可能需要彼此传递数据,并且在传递数据的过程中,它们需要一种易于使用、功能强大并为所有组件所理解的公用数据格式。
ADO记录集(表或视图的ADO表示)是一个相当不错的解决方案。 ADO记录集的灵活性足以使你能够毫不费力地定位记录以及使用过滤器和书签。它们还提供排序、自动分页和持久性等功能,并能在与数据源断开时工作。可以在多层之间相当高效地汇集记录集。 不过只有COM对象才能使用ADO记录集。这在COM/DCOM在业务层中占主导地位的同构体系结构中是合适的。但涉及到诸如大型机或Unix平台之类的异构节点时,就会带来很大的不便。 在可编程Web时代需要一种能同时跨越各种平台的操作数据的编程接口,但目前现实中的ADO,特别是记录集,是在Windows 和基于 COM的方案中操纵数据的强有力的工具。随着系统逐渐向完全的Inte.net互操作性方向演变,它们逐渐丧失了其吸引力。
在完美的情况下,应该能够在任何平台或设备上以相同的方式访问数据,并具有相同的灵活性。这样,每个平台或设备都可以根据需要自由地操纵数据。但如果通过ADO记录集操作数据,则会使自己和应用程序陷于有限互操作性之中。目前,如果通过ADO对数据进行访问,并希望将其传送到远程组件,要么使用从数据访问模块获得的相同的ADO记录集,要么将其转换为能够通过网络传送的另外的东西,最为重要的是,能够在其最终目的地被理解。记录集需要COM汇集,举例来说,COM调用并不是总能穿过公司防火墙。此外,在对ADO记录集进行汇集时,总处理时间的很大部分是用于完成必要的类型转换。事实上,必须确保记录中的所有的值映射到COM能够识别并知道如何进行处理的有效数据类型。当有关的组件在物理上是分开的并在不同的机器上运行时,COM汇集因素变得更为重要。因此,在向完全由Internet连接起来的世界前进的过程中,目前的Windows数据种类连同ADO记录集必须有所发展才能继续存在下去。 ADO需要改变是由于跨平台模块的交互作用需要一个通用数据模型。此外,我们不希望这个改变太大,原因是ADO内还存在若干很好的功能,放弃它们是一件可惜的事情。我们需要提取ADO记录集的本质,并将其重新构建成可以便利地在任意平台上进行传输和处理的另外一种东西。HTTP提供了被大多数人广泛接受的网络渠道。XML将广泛接受的数据描述的基础结构集合在一起。ADO.NET是对ADO的较小改进,它使之成为一个用于创建分布式和数据共享应用程序的基于各种标准的编程模型。
所有ADO.NET对象的基本原理和根源都是DataSet对象模型。
DataSet是ADO记录集的延伸。DataSet是一个简单、独立、存在于内存中的数据库视图。如果一个DataSet和数据源之间没有限制条件,在这种情况下的DataSet可以被动态地创建。DataSet使用了一些添加到ADO记录集中的功能:断开时工作的能力或用各种数据类型来填充和创建应用程序的能力等。一个DataSet可以包含任意数目的表,每个表通常(但不总是)对应于一个数据库表或视图。一个表(DataTable 对象)是一些行与列的集合,每一条记录行均保留其原始状态及其当前状态。
ADO 记录集经常被看作为一种高级的数组形式。同样,DataSet是一种提供以下功能的超级记录集:
☆ 一种容纳数据的更好和更丰富的编程接口;
☆ 一种提供更为广义的数据视图的对象模型;
☆ 一种用于输入和输出的基于XML的标准控制台。
ADO 记录集基本上是一种(可能是分层的)记录集合,它带有一些特定方法,用于完成一些特定功能。其中包括滚动、排序、过滤、书签。记录集本质上是表在内存中的副本。而DataSet看起来更象SQL Server 或Aclearcase/" target="_blank" >ccess数据库,它是一个包含更多表、特定视图和外键关系的实体。DataSet对象模型反映了这一较大的范围,它允许查看跨越多个数据表、关系、扩展属性和行的多个集合的可用数据,还可用于说明非持久数据或来自不是数据库的另一个持久存储介质的数据。
ADO 记录集允许将内容保存到XML中,并从一个外部XML文件重新构建该内容。然而,采用的缺省XML架构是针对导出/导入ADO 记录集而优化的,而不是针对实际数据交换的。ADO XML架构包含许多关于列类型和位置以及其他元数据的信息。如果希望从某一XML文档中重新构建记录集,则这些信息是至关重要的,但如果只是希望传递数据并使接收者使用它,则这些信息没有什么用处。有了DataSet,XML架构更为精练,因为被表示的对象与关系数据库没有直接关系,尽管对象可以用来再现数据库。DataSet对数据进行描述,而ADO 记录集则对由某一表中获取的一个记录集合进行描述。这就是ADO.NET数据模型的吸引之处。
ADO.NET XML架构只是负责再现表以及数据集中定义的关系,构建一个DataSet对象的责任则留给ADO.NET运行时完成。ADO XML格式由于过于具体而无法真正实现互操作。又因为它过于繁琐,所以如果不进行数据压缩的人工干预,它将无法进行汇集。而在DataSet体系结构中,可以安全地将数据从一层发送到另一