Для чтения только схемы данных (и игнорирования данных) предусмотрена перегруженная версия метода ReadXmlSchema, которая может применяться для считывания схемы объектов DataTable объекта DataSet так, как показано ниже. MyDataSet.ReadXmlSchema("MySchemaFile.xml")
Те же четыре источника данных (файл, объекты Stream, TextReader и XmlReader) могут использоваться вместе с методом ReadXmlSchema. Объект DataSet имеет аналогичный набор методов для записи XML-данных.
Запись XML-данных
После загрузки в объект DataSet (независимо от способа и места загрузки) данные и/или схемы данных можно записать в XML-формате (с XML-схемой или без нее). Для демонстрации способов записи данных в XML-формате выполните перечисленные ниже действия.
1. Создайте в форме новую кнопку сразу под кнопкой Read XML, перетаскивая ее из панели инструментов.
2. В окне свойств Properties укажите значение btnWriteXML для свойства (Name) и значение Write XML для свойства Text этой кнопки.
3. Затем в определении класса формы frmXML введите код из листинга 10.3.
Листинг 10.3. Код сохранения содержимого объекта DataSet в виде XML-файлаPrivate Sub btnWriteXML_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnWriteXML.Click
Dim dsSales As New DataSet()
Dim en As New SqlConnection _
("data source=localhost;initial catalog=pubs;user id=sa")
Dim daAuthors As New SqlDataAdapter("select * from sales", en)
Dim daPublishers As New SqlDataAdapter("select * from stores", en)
' Загрузка реляционных данных из базы данных.
daAuthors.Fill(dsSales, "Sales")
daPublishers.Fill(dsSales, "Stores")
' Запись XML-данных в файл
dsSales.WriteXml("…\StoreSales.xml")
' Запись схемы в XSD-файл.
dsSales.WriteXmlSchema("…\StoreSales.xsd")
End Sub
В этой подпрограмме создаются два объекта — адаптера данных (daAuthors и daPublishers), которые затем используются для вставки данных в объект dsPubs из двух таблиц базы данных pubs СУБД SQL Server. В листинге 10.4 приведено содержимое файла StoreSales.xml, который создается в результате выполнения этой подпрограммы. Обратите внимание на то, что данный XML-документ содержит записи о продажах, а затем записи о магазинах. Этот подход имеет смысл, так как между ними не задано никакого отношения. Если бы таблицы Sales и Stores были связаны, то эти записи можно было вложить друг в друга. Пример такого вложения приводится далее, в бизнес-ситуации 10.1.
ЛИСТИНГ 10.4. Содержимое файла StoreSales.xml<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<Sales>
<stor_id>6380</stor_id>
<ord_num>6871</ord_num>
<ord_date>l994-09-14T00:00:00.0000000+02:00</ord_date>
<qty>5</qty>
<payterms>Net 60</payterms>
<title_id>BU1032</title_id>
</Sales>
<Sales>
<stor_id>6380</stor_id>
<ord_num>722a</ord_num>
<ord_date>l994-09-13T00:00:00.0000000+02:00</ord_date>
<qty>3</qty>
<payterms>Net 60</payterms>
<title_id>PS2091</title_id>
</Sales>
<Sales>
<stor_id>7066</stor_id>
<ord_num>A2976</ord_num>
<ord_date>1993-05-24T00:00:00.0000000+02:00</ord_date>
<qty>50</qty>
<payterms>Net 30</payterms>
<title_id>PC8888</title_id>
</Sales>
<Sales>
<stor_id>7066</stor_id>
<ord_num>QA7442.3</ord_num>
<ord_date>1994-09-13T00:00:00.0000000+02:00</ord_date>
<qty>75</qty>
<payterms>ON invoice</payterms>
<title_id>PS209K/title_id>
</Sales>
<Sales>
<stor_id>7067</stor_id>
<ord_num>D4482</ord_num>
<ord_date>1994-09-14T00:00:00.0000000+02:00</ord_date>
<qty>10</qty>
<payterms>Net 60</payterms>
<title_id>PS2091</title_id>
</Sales>
<Sales>
<stor_id>7067</stor_id>
<ord_nurn>P2121</ord_num>
<ord_date>1992-06-15T00:00:00.0000000+02:00</ord_date>
<qty>40</qty>