Updategram 和 Diffgram

2008-04-02 10:46:44来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

企业领域中的研发工作正日益变为更加利用 Internet 的功能和互操作性。重点已从研发传统的客户端/服务器应用程式(需要严格定义用于交换数据的数据结构和协议)转向了研发使用 XML 的 Web 应用程式。和传统的客户端/服务器应用程式相同,Web 应用程式也通过 LAN 或 WAN 在不同的逻辑实体之间交换数据。但是,Web 应用程式使用公共 Internet 和 XML,而不使用专用连接和二进制数据格式。在需要访问和更新存储在关系数据库(如 SQLServer)中的数据方面,大多数 Web 应用程式也和客户端/服务器应用程式相似。Web 应用程式必须从 SQL Server 获取 XML 查询结果,并使用 XML 格式的数据更新 SQL Server。Microsoft 已通过在 SQL Server 2000、XML for SQL Server 2000 (SQLXML) 和 .NET 框架中实现许多技术满足了这些需要。(有关这些技术的概述,请参阅 2002 年 4 月的“Selecting XML Technologies for Queries and Updates”,InstantDoc ID 24342。)这些技术为构建各种 Web 应用程式提供了坚实的基础。但是,经过证实,处理数据库更新总是比较困难。China It Power . ComUpJ5uRS

Microsoft 提供了几个用来更新数据库的选项,包括 OpenXML、XML Bulk Load、updategram 和 Diffgram。我们已在以前的专栏中研究了 OpenXML 和 XML Bulk Load;现在,该介绍 updategram 和 Diffgram 了。用来快速构建实际 Web 应用程式方案的每种技术都有很大的缺陷。在这些应用程式方案中,数据从某个 Web 应用程式进行请求、在客户端位置进行远程修改,随后返回到该 Web 应用程式,以便所做的修改能够存储在数据库中。在这些方案中,对于 Web 应用程式有三个隐含需要。第一个是对开放式更新的需求。由于客户端和服务器之间的 Internet 连接是异步的、短暂的并且有可能是不可靠的,因此 Web 应用程式需要进行开放式更新。假如没有开放式更新,则由于在超时之前仍有许多锁,应用程式和数据库性能会迅速降低。第二个需要是,客户端无需(而且不应当预知)数据库结构。第三个需要是,客户端需要一种方法来传送对数据进行的更改(包括并发信息),以便克服多个客户端对服务器进行的竞争更新。Updategram 和 Diffgram 是相似的技术,他们都在不同程度上支持这三个需要。因此,假设您正在构建 Web 应用程式,那么应当使用哪种技术?China It Power . ComUpJ5uRS

UpdategramChina It Power . ComUpJ5uRS

updategram 是一种 XML 文档,他描述对 XML 查询结果进行的更改。结合使用 updategram 和任何 SQLXML Web 版本,能够对数据库进行开放式更新。Updategram 还支持更新数据库中和 XML 中的分层关系相对应的一个或多个表。例如,能够将嵌套在 XML 定单元素中的定单项插入到数据库的 Order 和 LineItem 表中。尽管 updategram 会尝试满足更新数据的三个需要,但是他们在以下几个方面存在缺陷。China It Power . ComUpJ5uRS

首先,ADO、SQL Server、SQLXML 或对象模型(如 XML 文档对象模型 (DOM))不支持 updategram。这种缺陷会从三个方面降低 updategram 的有用性。第一,因为 ADO 和 DOM 不支持生成 updategram,所以您必须实现一个直接生成 updategram 语法的客户端代码。更糟糕的是,这项艰巨的任务不能在项目之间进行缩放;每当您希望生成一个 updategram 时,都必须实现该逻辑。第二,在将数据存储到数据库中之前,Web 应用程式通常需要使用业务逻辑来检验和验证数据。同样,您需要用一个对象模型来表达该业务逻辑(因为该技术使用开放式更新),以便确认在从数据库检索数据之后和尝试更新数据之前之间的这段时间内,数据未发生变化。第三,对象模型在理想情况下可使您能够以一种一致的方式来访问更新的数据和原始值。但是,您也需要实现一个代码,该代码除了执行业务逻辑和并发检查,还要解释 updategram 语法。China It Power . ComUpJ5uRS

Updategram 更有一个缺陷,就是无法调用存储过程来执行数据库更新。因此,通过使用存储过程而实现的业务逻辑、约束和引用完整性都呈现为无用状态。China It Power . ComUpJ5uRS

updategram 用来表达数据集更改的方式可能会造成另一个问题。这些更改是用 XML 而不是关系数据库表达的。尽管用这种方式表达所做的更改通常大有裨益(这是因为他向客户端隐藏了数据库的周详信息),但是他还可能排除某些数据,而在将所做的更改提交到数据库中之前,您可能需要这些数据来验证所做的更改或执行业务逻辑。China It Power . ComUpJ5uRS

最后,updategram 通常的应用方式也存在缺陷。因为 updategram 最适于进行批处理,所以,假如 SQL Server 能够按照他处理 T-SQL UPDATE 语句的方式来处理 updategram 的话,updategram 则会生成最高效的结果。但是,当前的 SQLXML 实现在中间层处理 updategram,并生成由 SQL Server 执行的 SQL 语句,而不是直接处理 updategram。因此,尽管 updategram 从表面看很适合在 Web 应用程式中更新数据,并且有可能适合一组范围较窄的情形,但是,其缺点限制了对他们的广泛应用。China It Power . ComUpJ5uRS

DiffgramChina It Power . ComUpJ5uRS

Diffgram 是随 ADO.NET 支持一起引入 .NET框架中的。Diffgram 和 updategram 相似,但是能够解决 updategram 中一些固有的最严重的问题。最重要的是,Diffgram 通过 ADO.NET DataSet 对象提供对象模型支持。您能够通过持久性保持一个 Diffgram 格式的 DataSet,来直接从该 DataSet 定义中生成 Diffgram,也能够从持久性 Diffgram 中创建 DataSet。因此,当您构建业务逻辑时,不必编写用来生成 Diffgram 或导航 Diffgram 结构的代码。相反,您只需使用 DataSet 对象来编写代码。您还能够结合使用 DataSet 对象和 DataAdapter 对象,将以 Diffgram 表达的更改提交到数据库中。(DataAdapter 是 ADO.NET 中的一个中间对象,他从数据库中读取数据并将所做的更改更新到数据库。)另外,DataAdapter 支持通过存储过程来进行更新,而且会在对数据进行了并发更新之后,引发一个程式事件。尽管对于程式员来说,Diffgram 比 updategram 方便得多,但是使用 Diffgram 也有一些注意事项。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 查询开放内容

下一篇: Microsoft SQL Server 2000 的国际化功能(2)