ADO.NET与XML的结合
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="SomeID"
xmlns=""
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="MyDataSet" msdata:IsDataSet="true">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="customers" >
<xs:complexType >
<xs:sequence>
<xs:element name="CustomerID" type="xs:integer" minOccurs="0" />
<xs:element name="CompanyName" type="xs:string" minOccurs="0" />
<xs:element name="Phone" type="xs:string" />
</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("input.xml", XmlReadMode.ReadSchema);
③当没有提供计划时从一个XML文件的内容中推断一个DataSet的计划;
要从一个XML文件载入DataSet的计划信息,你可以使用DataSet对象的ReadXmlSchema方法。如果没有提供计划,你还可以使用InferXmlSchema从XML文件推断DataSet的计划,下面的例子介绍如何通过InferXmlSchema从一个XML文件推断出DataSet的计划:
DataSet myDS = new DataSet();
myDS.InferXmlSchema("input_od.xml", new string[] "urn:schemas-microsoft-com:officedata");
④象XSD格式计划一样写一个DataSet的计划;
下面的例子展示如何通过ReadXmlSchema从一个XSD文件载入DataSet的计划:
DataSet myDS = new DataSet();
myDS.ReadXmlSchema("schema.xsd");
⑤象XML格式文件一样读写一个DataSet的内容。
利用DiffGrams从DataSet中读写内容,下面的例子显示在提交更改之前更新表中一行数据的结果,其中CustomerID为ALFKI的那一行数据被修改但是还没有更新:
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<CustomerDataSet>
<Customers diffgr:id="Customers1" msdata:rowOrder="0" diffgr:hasChanges="modified">
<CustomerID>ALFKI</CustomerID>
<CompanyName>New Company</CompanyName>
</Customers>
<Customers diffgr:id="Customers2" msdata:rowOrder="1" diffgram:hasErrors="true">
<CustomerID>ANATR</CustomerID>
<CompanyName>Ana Trujillo Emparedados y helados</CompanyName>
</Customers>
<Customers diffgr:id="Customers3" msdata:rowOrder="2">
<CustomerID>ANTON</CustomerID>
<CompanyName>Antonio Moreno Taquerí&shy;a</CompanyName>
</Customers>
<Customers diffgr:id="Customers4" msdata:rowOrder="3">
<CustomerID>AROUT</CustomerID>
<CompanyName>Around the Horn</CompanyName>
</Customers>
</CustomerDataSet>
<diffgr:before>
<Customers diffgr:id="Customers1" msdata:rowOrder="0">
<CustomerID>ALFKI</CustomerID>
<CompanyName>Alfreds Futterkiste</CompanyName>
</Customers>
</diffgr:before>
<diffgr:errors>
<Customers diffgr:id="Customers2" diffgr:Error="An optimistic concurrency violation has occurred for this row."/>
</diffgr:errors>
</diffgr:diffgram>