ADO.NET与XML的结合(c#)

来源:互联网 发布:图片文字扫描软件 编辑:程序博客网 时间:2024/06/01 08:09
ADO.NET在DataSet中提供对XML的广泛支持.下面是使用XML和ADO.NET的一些技巧信息。
I.DataSet和XML

        DataSet和XML的完美整合,可以使你完成以下事情:
            ①从XSD计划中载入一个DataSet的计划或相关结构;

            下面的例子说明一个XSD文件的结构,其中MyDataSet就是我们的DataSet元素,它下面包含一个customers复合类型元素,有了它我们就可以映射创建一个这样的表:Customers (CustomerID,CompanyName,Phone),同时也定义我们的DataSet的计划或者结构:

<xs:schema id=&quot;SomeID&quot;
            xmlns=&quot;&quot;
            xmlns:xs=&quot;http://www.w3.org/2001/XMLSchema&quot;
            xmlns:msdata=&quot;urn:schemas-microsoft-com:xml-msdata&quot;>
    <xs:element name=&quot;MyDataSet&quot; msdata:IsDataSet=&quot;true&quot;>
      <xs:complexType>
        <xs:choice maxOccurs=&quot;unbounded&quot;>
          <xs:element name=&quot;customers&quot; >
            <xs:complexType >
              <xs:sequence>
                <xs:element name=&quot;CustomerID&quot; type=&quot;xs:integer&quot;  minOccurs=&quot;0&quot; />
                <xs:element name=&quot;CompanyName&quot; type=&quot;xs:string&quot;    minOccurs=&quot;0&quot; />
                <xs:element name=&quot;Phone&quot; type=&quot;xs:string&quot; />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:choice>
      </xs:complexType>
    </xs:element>
  </xs:schema>


②从XML文件中载入一个DataSet的内容;

            要从XML文件填充DataSet的内容,请使用DataSet对象的ReadXml方法。下面的例子说明如何从一个XML文件读取数据到一个DataSet:

DataSet myDS = new DataSet();
myDS.ReadXml(&quot;input.xml&quot;, XmlReadMode.ReadSchema);


③当没有提供计划时从一个XML文件的内容中推断一个DataSet的计划;

            要从一个XML文件载入DataSet的计划信息,你可以使用DataSet对象的ReadXmlSchema方法。如果没有提供计划,你还可以使用InferXmlSchema从XML文件推断DataSet的计划,下面的例子介绍如何通过InferXmlSchema从一个XML文件推断出DataSet的计划:

DataSet myDS = new DataSet();
myDS.InferXmlSchema(&quot;input_od.xml&quot;, new string[] &quot;urn:schemas-microsoft-com:officedata&quot;);


④象XSD格式计划一样写一个DataSet的计划;

            下面的例子展示如何通过ReadXmlSchema从一个XSD文件载入DataSet的计划:

DataSet myDS = new DataSet();
myDS.ReadXmlSchema(&quot;schema.xsd&quot;);


⑤象XML格式文件一样读写一个DataSet的内容。

            利用DiffGrams从DataSet中读写内容,下面的例子显示在提交更改之前更新表中一行数据的结果,其中CustomerID为ALFKI的那一行数据被修改但是还没有更新:

<diffgr:diffgram xmlns:msdata=&quot;urn:schemas-microsoft-com:xml-msdata&quot; xmlns:diffgr=&quot;urn:schemas-microsoft-com:xml-diffgram-v1&quot;>
  <CustomerDataSet>
    <Customers diffgr:id=&quot;Customers1&quot; msdata:rowOrder=&quot;0&quot; diffgr:hasChanges=&quot;modified&quot;>
      <CustomerID>ALFKI</CustomerID>
      <CompanyName>New Company</CompanyName>
    </Customers>
    <Customers diffgr:id=&quot;Customers2&quot; msdata:rowOrder=&quot;1&quot; diffgram:hasErrors=&quot;true&quot;>
      <CustomerID>ANATR</CustomerID>
      <CompanyName>Ana Trujillo Emparedados y helados</CompanyName>
    </Customers>
    <Customers diffgr:id=&quot;Customers3&quot; msdata:rowOrder=&quot;2&quot;>
      <CustomerID>ANTON</CustomerID>
      <CompanyName>Antonio Moreno Taquerí&amp;shy;a</CompanyName>
    </Customers>
    <Customers diffgr:id=&quot;Customers4&quot; msdata:rowOrder=&quot;3&quot;>
      <CustomerID>AROUT</CustomerID>
    <CompanyName>Around the Horn</CompanyName>
    </Customers>
  </CustomerDataSet>
  <diffgr:before>
    <Customers diffgr:id=&quot;Customers1&quot; msdata:rowOrder=&quot;0&quot;>
      <CustomerID>ALFKI</CustomerID>
      <CompanyName>Alfreds Futterkiste</CompanyName>
  </Customers>
  </diffgr:before>
  <diffgr:errors>
    <Customers diffgr:id=&quot;Customers2&quot; diffgr:Error=&quot;An optimistic concurrency violation has occurred for this row.&quot;/>
  </diffgr:errors>
</diffgr:diffgram>
原创粉丝点击