ADO.NET DataSet 为您提供了数据的关系表示形式。若要实现分层数据访问,可以使用 .NET 框架中的可用 XML 类。以前,数据的这两种表示形式是单独使用的。不过,.NET 框架允许分别通过 DataSet 对象和 XmlDataDocument 对象对数据的关系和分层表示形式进行实时、同步的访问。
当 DataSet 与 XmlDataDocument 同步时,这两个对象都使用同一组数据。这意味着如果对 DataSet 作出更改,更改将在 XmlDataDocument 中得到反映,反之亦然。DataSet 和 XmlDataDocument 之间的这种关系允许单个应用程序使用一组数据来访问围绕 DataSet 生成的整组服务(例如 Web 窗体和 Windows 窗体控件以及 Visual Studio .NET 设计器)以及包括可扩展样式表语言 (Extensible Stylesheet Language, XSL)、XSL 转换 (XSLT) 和 XML 路径语言 (XPath) 在内的 XML 服务组,从而提供了很大的灵活性。您不必选择使应用程序以哪一组服务为目标——这两组服务都可用。
有若干种方法可以使 DataSet 与 XmlDataDocument 同步。您可以:
[Visual
Basic]
Dim myDataSet As DataSet = New DataSet
' Add code here to populate the DataSet with schema and data.
Dim xmlDoc As XmlDataDocument = New XmlDataDocument(myDataSet)
[C#]
DataSet myDataSet = new DataSet();
// Add Code here to populate the DataSet with schema and data.
XmlDataDocument xmlDoc = new XmlDataDocument(myDataSet);
请注意,DataSet 的架构只需匹配需要在关系视图中公开的 XML 元素。这样,就可以具有非常大的 XML 文档,而该文档上可以有非常小的关系“窗口”。即使 DataSet 仅公开 XML 文档的一小部分,XmlDataDocument 仍将保留整个 XML 文档。(有关详细示例,请参阅使 DataSet 与 XmlDataDocument 同步的示例。)
以下代码示例显示创建 DataSet 和填充其架构,然后使其与 XmlDataDocument 同步的步骤。请注意,DataSet 架构只需要匹配 XmlDataDocument 中要使用 DataSet 公开的元素。
[Visual
Basic]
Dim myDataSet As DataSet = New DataSet
' Add code here to populate the DataSet with schema, but not data.
Dim xmlDoc As XmlDataDocument = New XmlDataDocument(myDataSet)
xmlDoc.Load("XMLDocument.xml")
[C#]
DataSet myDataSet = new DataSet();
// Add code here to populate the DataSet with schema, but not data.
XmlDataDocument xmlDoc = new XmlDataDocument(myDataSet);
xmlDoc.Load("XMLDocument.xml");
如果 XmlDataDocument 已经与包含数据的 DataSet 同步,则不能加载该 XmlDataDocument。否则会引发异常。
以下代码示例显示如何访问 XmlDataDocument 中数据的关系视图。
[Visual
Basic]
Dim xmlDoc As XmlDataDocument = New XmlDataDocument
Dim myDataSet As DataSet = xmlDoc.DataSet
' Add code here to create the schema of the DataSet to view the data.
xmlDoc.Load("XMLDocument.xml")
[C#]
XmlDataDocument xmlDoc = new XmlDataDocument();
DataSet myDataSet = xmlDoc.DataSet;
// Add code here to create the schema of the DataSet to view the data.
xmlDoc.Load("XMLDocument.xml");
使 XmlDataDocument 与 DataSet 同步的另一个优点是避免了 XML 文档的失真。如果 DataSet 是使用 ReadXml 从 XML 文件中填充的,那么当使用 WriteXml 以 XML 文档形式写回数据时,数据可能大大不同于初始的 XML 文档。这是因为 DataSet 不维护 XML 文档中的格式设置(如空白)或分层信息(如元素顺序)。DataSet 也不包含 XML 文档中因为不匹配 Dataset 架构而被忽略的元素。通过使 XmlDataDocument 与 DataSet 同步,可以在 XmlDataDocument 中维护初始 XML 文档的格式设置和分层元素结构,而 DataSet 仅包含适用于 DataSet 的数据和架构信息。
当使 DataSet 与 XmlDataDocument 同步时,根据 DataRelation 对象是否嵌套,所得的结果可能会有所不同。有关更多信息,请参阅嵌套的 DataRelation。
本节内容
| 本节演示订单处理过程中的一个步骤,该步骤将使用与
XmlDataDocument 同步的强类型 DataSet。随后的示例将创建具有最小化架构的
DataSet,它仅匹配源 XML
文档的一部分。这些示例将使用 XmlDataDocument
来避免源 XML 文档失真,从而使 DataSet 可用来公开
XML 文档的子集。
以下 XML 文档包含所有与订单相关的信息:客户信息、订购的货物、发货信息等。 <?xml version="1.0" standalone="yes"?> 在处理以上 XML 文档包含的订单信息时,其中一个步骤是利用公司当前的库存来为订单供货。负责从公司仓库中给订单供货的职员不需要查看订单的全部内容——他们只需要查看该订单的产品信息。若要仅从 XML 文档中公开产品信息,可创建一个强类型 DataSet,该 DataSet 以 XML 架构定义语言 (XSD) 架构的形式来编写,并具有映射到所订购的产品及数量的架构。有关强类型 DataSet 对象的更多信息,请参阅使用类型化的 DataSet。 以下代码显示从其中为该示例生成的强类型 DataSet 的架构。 <?xml version="1.0" standalone="yes"?> |