前往顾页
以后地位: 主页 > 收集编程 > .Net实例教程 >

ADO.NET 中的 XML 特性概述

时候:2013-07-16 23:10来源:知行网www.zhixing123.cn 编辑:麦田守望者

 毫无疑问,XML 及其一些相关技术(包含 XPath、XSL Transformation 和 XML Schema)是 ADO.NET 的根本。与 ADO 比拟,ADO.NET 工具模型的互操纵性获得很年夜的进步,而究竟上,XML 恰是为此阐扬首要感化的关头元素。在 ADO 中,XML 只是一个用于保存断开连接的记录集的内容的(非默许)I/O 格局。而 XML 在 ADO.NET 的构建和交互方面的参与则深切很多。可以用以下几点来概括 ADO.NET 与 XML 的更强的交互和集成:
?工具序列化和长途措置

  ?双编程接口

  ?XML 驱动的批措置更新(仅合用于 SQL Server 2000)

  在 ADO.NET 中,您可以用多少种体例将工具保存到 XML 文档和从 XML 文档复原工具。总之,这类才气只属于 DataSet 工具,但可以用起码的代码扩展到其他容器工具。将诸如 DataTable 和 DataView 如许的工具保存到 XML 本色上可视为数据集序列化的特别环境。

  别的,ADO.NET 和 XML 类供应了一种同一的中间 API,法度员可经由过程同步的双编程接口来利用它。您可利用 XML 基于节点的分层法或基于列的表格局数据集关系法来拜候和更新数据。您可以在任甚么时候候从数据的数据集表示情势切换到 XML DOM,反之亦然。数据将进行同步,并且您在此中一个模型中输入的任何变动会当即在另外一个模型中有所反应,并可以瞥见。在本文中,我将会商 ADO.NET 到 XML 的序列化和 XML 数据拜候,也就是下面列表中的前两点。下个月,我将首要会商 XML 驱动的批措置更新 — 您从 SQL Server 2000 XML Extensions (SQLXML 2.0) 获得的最酷特性之一。

  数据集和 XML

  就像任何其他 .NET 工具一样,DataSet 工具以二进制格局存储在内存中。不过,与其他工具不合的是,数据集始终以一种名为 DiffGram 的特别XML 格局来进行长途措置和序列化。当数据集进入利用法度域的鸿沟或计较机的物理鸿沟时,会主动闪现为 DiffGram。在目标端,无提示地从头构建数据集为二进制工具,并可以当即便用。利用法度可以经由过程一组体例来利用一样的序列化服从,此中的一对体例明显非常凸起。它们是 ReadXml 和 WriteXml。下表显现了您可以用来在读写中利用 XML 的数据集的体例。

  GetXml?前往一个字符串,该字符串是数据集合存储的数据的 XML 表示情势

  ?不包含任何架构信息

  GetXmlSchema?前往一个字符串,该字符串是数据集的 XML 架构信息

  ReadXml?利用从流或文件读取的指定 XML 数据添补 DataSet 工具

  ReadXmlSchema?将指定的 XML 架构信息加载到以后的 DataSet 工具

  WriteXml?写入表示数据集的 XML 数据(或架构)

  ?可以写入流或文件

  WriteXmlSchema?写入字符串,该字符串是数据集的 XML 架构信息

  ?可以写入流或文件

  正如上表所示,利用 DataSet 和 XML 时,您可以将数据和架构信息作为不合的实体进行办理。您可以接管来自数据集的 XML 架构,将它作为字符串利用。您也能够将它写入磁盘文件或将它加载到一个空的 DataSet 工具。与上表中列出的体例可以等量齐观的是,DataSet 工具还包含两个与 XML 相关的属性 — Namespace 和 Prefix。Namespace 肯定将 XML 属性和元素读取到数据集时用于限定其范围的 XML 定名空间。作为定名空间别号的前缀存储在 Prefix 属性中。

  从 XML 构建数据集

  ReadXml 体例添补从多个源读取的 DataSet 工具,这些源包含磁盘文件、.NET 流或 XmlReader 工具的实例。该体例可以措置任何范例的 XML 文件,但是,如果 XML 文件具有构形相当不法则的非表格局布局,则在以列和行的格局闪现时,当然可能产生一些问题。

  ReadXml 体例有几个重载,所有这些重载都十分近似。它们接管 XML 源和可选的作为参数的 XmlReadMode 值。比方:

  public XmlReadMode ReadXml(String, XmlReadMode);

  该体例按照指定的读形式和数据集合是不是已存在架构来为数据集建立关系架构。下面的代码片段显现了用于从 XML 加载数据集的典范代码。

  StreamReader sr = new StreamReader(fileName);DataSet ds = new DataSet();ds.ReadXml(sr); // defaults to XmlReadMode.Autosr.Close();

  将 XML 源的内容加载到数据集时,ReadXml 不归并其主键信息相婚配的行。要将现有的数据集与从 XML 加载的数据集归并,起首必须建立一个新的数据集,然后利用 Merge 体例归并这两个数据集。在归并期间,所要覆盖的行就是那些具有相婚配的主键的行。您也可利用另外一种体例将现有的 DataSet 工具与从 XML 读取的内容进行归并,即经由过程 DiffGram 格局(稍后将详细会商)。

  下表诠氏缢 ReadXml 支撑的多个读形式。您可利用 XmlReadMode 枚举对它们进行设置。

  IgnoreSchema忽视任何嵌入式架构,而依托数据集的现有架构

  ReadSchema读取任何嵌入式架构,并加载数据和架构

  InferSchema忽视任何嵌入式架构,并从 XML 数据推断架构

  DiffGram读取 DiffGram,并将数据增加到以后架构

  Fragment读取和增加 XML 片段,一向到流的末端

  默许的读形式没有在表中列出,这就是 XmlReadMode.Auto。设置此形式时,或还没有显式设置任何读形式时,ReadXml 体例将查抄 XML 源并挑选最适合的选项。

  如果发明 XML 源是 DiffGram,则将源作为 DiffGram 加载。如果源恰好包含嵌入式架构或对外部架构的援引,将利用 ReadXmlSchema 来加载源。最后,如果 XML 源中不存在任何架构信息,则 ReadXml 体例利用数据集的 InferXmlSchema 体例推断架构。数据集的关系布局(即架构)由表、列、束缚和关系构成。下面我们来看看设置此中的每种形式时会产生甚么环境。

  XmlReadMode.IgnoreSchema 选项将使该体例忽视任何嵌入式架构或援引的架构。是以,该数据被加载到现有的数据集架构,而不适合的任何数据将被放弃。如果数据集合不存在架构,则不加载任何数据。重视,空的数据集没有架构信息。记着,如果 XML 源是 DiffGram 格局的,则 IgnoreSchema 选项的结果与 XmlReadMode.DiffGram 一样。

  // no schema in the DataSet, no data will be loadedDataSet ds = new DataSet();StreamReader sr = new StreamReader(fileName);ds.ReadXml(sr, XmlReadMode.IgnoreSchema);


XmlReadMode.ReadSchema 选项只对嵌入式架构有效,而不辨认外部援引。它可以向数据集增加新表,但如果数据集合已存在在嵌入式架构中定义的任何表,则将激发异常。您不克不及利用 ReadSchema 选项来变动一个现有表的架构。如果数据集不包含架构(也就是说,数据集是空的),并且没有嵌入式架构,则不读取和加载任何数据。ReadXml 只能读取利用 XML 架构定义说话 (XSD) 或 XML-Data Reduced (XDR) 定义的嵌入式架构。不支撑任何文档范例定义 (DTD)。

  如果设置了 XmlReadMode.InferSchema 选项,ReadXml 将直接从 XML 数据的布局推断架构,并忽视可能存在的任何嵌入式架构。只需在推断出架构后,才加载数据。经由过程按照环境来增加新表或向现有的表增加新列可扩展现有的架构。您可利用数据集的 InferXmlSchema 体例将架构从指定的 XML 文件加载到数据集。在某种程度上,您可以节制在架构推断操纵过程中措置的 XML 元素。操纵体例 InferXmlSchema 的署名,您可以指定一组其元素将从推断中解除的定名空间。

  void InferXmlSchema(String fileName, String[] rgNamespace);

  DiffGram 是 ADO.NET 用于保存数据集状况的 XML 格局。与 SQLXML 的 updategram 格局近似的是,DiffGram 同时包含数据行的以后状况和原始状况。利用 ReadXml 加载 DiffGram 时,将归并具有相婚配的主键的行。您可利用 XmlReadMode.DiffGram 标记显式唆使 ReadXml 对 DiffGram 见效。利用 DiffGram 格局时,目标数据集必须具有与 DiffGram 不异的架构,不然,归并操纵将失败,并会激发异常。

  如果设置了 XmlReadMode.Fragment 选项,将从 XML 片段加载数据集。XML 片段是一段有效的 XML,它标识元素、属性和文档。元素的 XML 片段是完整限定 XML 元素(节点、CDATA、措置指令、注释)的标识表记标帜文本。属性的片段是属性值,文档的片段则是全部内容调集。如果 XML 数据是一个片段,则不该用完整格局的 XML 文档的根级别法则。与现有的架构相婚配的片段被追加到恰当的表,不婚配架构的片段将被放弃。ReadXml 从以后地位读到流的末端。XmlReadMode.Fragment 选项不该该用于添补一个空的并且贫乏架构的数据集。

  将数据集工具序列化到 XML

  数据集的 XML 表示情势可利用 WriteXml 体例写入文件、流、XmlWriter 工具或字符串。XML 表示情势可以包含架构信息,也能够不包含架构信息。WriteXml 体例的实际施为可经由过程您可以通报的 XmlWriteMode 参数来节制。XmlWriteMode 枚举中的值决定着输入的布局。数据集表示情势包含表、关系和束缚定义。如果您不挑选利用 DiffGram 格局,数据集的表中的行就只写入其以后版本。下表概括了 XmlWriteMode 可利用的写选项。

  IgnoreSchema将数据集内容作为没有架构的 XML 数据写入

  WriteSchema写入具有嵌入式 XSD 架构的数据集内容

  DiffGram将数据集内容作为 DiffGram 写入,包含原始值和以后值

  XmlWriteMode.IgnoreSchema 是默许选项。下面的代码显现了将数据集序列化为 XML 的典范体例。

  // ds is the DataSetStreamWriter sw = new StreamWriter(fileName);ds.WriteXml(sw); // defaults to XmlWriteMode.IgnoreSchemasw.Close();

  有几个身分影响了从 DataSet 工具建立的 XML 文档的终究布局。这些身分包含:

  ?利用的 XML 团体格局 — DiffGram 或以后内容的无格局分层表示情势

  ?架构信息是不是存在

  ?嵌套关系

  ?表列若何映照到 XML 元素

  DiffGram 格局是自己稍后将进一步申明的特别 XML 格局。它不包含架构信息,但保存行状况和行错误。因此,它仿佛能构成数据集及时实例的更靠近的表示情势。

------分开线----------------------------
标签(Tag):C# C#实例教程 c#根本教程 C#源代码 c#技能
------分开线----------------------------
保举内容
猜你感兴趣