ado+ 从一开始就被设计为对断开的数据集进行操作。断开的记录集只能有益于应用程序,因为它们是数据的本地视图,能够较快地处理和传输数据。ado+ 将 xml 用作通用的传输格式。只要接收组件运行于有 xml 分析程序可用的平台上,就可以提供许多功能,同时确保互操作性。通过 xml 进行传输时,接收者不再必须是一个 com 对象。xml 是一种简单但却功能强大的基于文本的标准,它近来已广为业界所接受,因而,目前有理由期待差不多每个平台上都会有一个 xml 分析程序。这样的话,接收组件就不会有任何的体系结构限制。任何一对软件组件都可以共享 ado+ 数据,只要它们同意将相同的 xml 架构用于传输数据格式。图 2 对 ado+ 适用于现有体系结构的方式进行了说明。
图 2. 在 dna 方案中使用 ado+
表示层可以通过 win forms 或 web forms(这两种编程单元专用于 microsoft visual studio.net 平台)使用或创建数据集。在任一种情况下,运行于业务层的组件都接收一个 xml 流并进行任意处理。这些组件可以重新构建一个 ado+ 环境,也可以将数据按原始 xml 处理并使其适合于发送到物理数据存储器中。业务组件可以获取 ado+ 数据,将其转换为 xml,然后将其发送回客户机。任何可以理解 xml 的应用程序都可以在任一点上介入这一架构。
将 xml 用作数据集的传输语言可以比 ado 更有效地进行数据共享。首先,绕过诸如记录集之类的 com 对象所必需的 com 汇集使组件可以使用它们要使用的任意数据类型的集合。这还会带来更好的性能,因为不再需要确保记录符合标准的 com 数据类型的数据类型转换。xml 和 http 的使用还允许数据跳过防火墙。正常情况下,防火墙允许 http 数据包通过,但会阻止任何试图经由端口号不是 80 的端口进来的任何其它内容通过。
一种用于输入和输出的基于 xml 的标准控制台。 ado 记录集基本上是一种(可能是分层的)记录集合,它带有一些特定方法,用于完成一些有趣功能。其中包括包括滚动、排序、过滤、书签。记录集本质上是表在内存中的副本。而数据集看起来更象 sql server 或 access 数据库,它是一个包含更多表、特定视图和外键关系的实体。
ado 记录集允许您将内容保存到 xml 中,并从一个外部 xml 文件重新构建该内容。然而,采用的缺省 xml 架构是针对导出/导入 ado 记录集而优化的,而不是针对实际数据交换。ado xml 架构包含许多关于列类型和位置以及其它元数据的信息。如果您希望从某一 xml 文档中重新构建记录集,则这些信息是至关重要的,但如果您只是希望传递数据并使接收者使用它,则这些信息没有什么用处。有了 ado+ 数据集,xml 架构更为精练,因为被表示的对象与关系数据库没有直接关系,尽管对象可以用来精密地再现数据库。ado+ 数据集对数据进行描述,而 ado 记录集则对由某一表中获取的一个记录集合进行描述。这就是 ado+ 数据模型的动人之处。
ado+ xml 架构只是再现表以及数据集中定义的关系,构建一个 dataset 对象的责任则留给 ado+ 运行时完成。ado xml 格式由于过于具体而无法真正实现互操作。它还由于过于繁琐,如果不进行数据压缩的人工干预,它就无法进行高效的汇集。ado+ 数据集体系结构的鼓舞人心的原则与导致我创建 javascript 的 recordset 对象的原因之间存在一种底层的相似之处。在这两种情形中,您都将数据说明(例如,一个 xml 字符串)转换为一个专用于平台的操作对象(即一个 javascript 对象)。在这样做的过程中,您安全地将您的数据从一层发送到另一层,而不考虑安装的操作系统或软件。
dim ocn as sqlconnection dim ocmd as sqlcommand dim odr as adodatareader ocn = new sqlconnection(strnwind) ocmd = new sqlcommand("mystoredproc 'davolio'", ocn) ocmd.commandtype = commandtype.storedprocedure try ocn.open() ocmd.execute(odr)
while odr.read console.writeline(odr("lastname").tostring)) end while catch e as exception console.writeline(e.tostring) finally odr.close() ocn.close() end try
请注意,上述代码具有 microsoft visual basic® 7.0 引入的一些语法元素的特征 — 特别是最终取代了 on error 机制的 try-catch 结构。ado+ 代码充分利用了提供诸如 console 之类的系统对象的.net 运行时服务。