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:
‘C#
DataSet myDS = new DataSet();
myDS.ReadXml("input.xml", XmlReadMode.ReadSchema);
③當沒有提供計劃時從一個XML檔案的內容中推斷一個DataSet的計劃;
要從一個XML檔案載入DataSet的計劃資訊,你可以使用DataSet對象的ReadXmlSchema方法。如果沒有提供計劃,你還可以使用InferXmlSchema從XML檔案推斷DataSet的計劃,下面的例子介紹如何通過InferXmlSchema從一個XML檔案推斷出DataSet的計劃:
‘C#
DataSet myDS = new DataSet();
myDS.InferXmlSchema("input_od.xml", new string[] "urn:schemas-microsoft-com:officedata");
④象XSD格式計劃一樣寫一個DataSet的計劃;
下面的例子展示如何通過ReadXmlSchema從一個XSD檔案載入DataSet的計劃:
‘C#
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í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>