Чтение онлайн

ЖАНРЫ

Обработка баз данных на Visual Basic®.NET

Прайс Кевин Т.

Шрифт:

<xs:sequence>

<xs:element name="stor_id" type="xs:string" minOccurs="0" />

<xs:element name="stor_name" type="xs:string" minOccurs="0" />

<xs:element name="stor_address" type="xs:string" minOccurs="0" />

<xs:element name="city" type="xs:string" minOccurs="0" />

<xs:element name="state" type="xs:string" minOccurs="0" />

<xs:element name="zip" type="xs:string" minOccurs="0" />

</xs:sequence>

</xs:complexType>

</xs:element>

</xs:choice>

</xs:complexType>

 </xs:element>

</xs:schema>

Формат DiffCram

Рассмотрим

теперь формат DiffGram, который используется членами перечислений XmlReadMode и XmlWriteMode. Это XML-формат, содержащий не только текущие значения элементов-данных, но и их исходные значения, которые были изменены или удалены (вслед за последним вызовом метода AcceptChanges). Итак, DiffGram представляет собой формат сериализации, который используется для передачи данных другому процессу или компьютеру. Поскольку эти данные фактически имеют XML-формат, они могут легко передаваться другим платформам, например UNIX или Linux.

Каждый файл формата DiffGram имеет три раздела. Первый раздел содержит текущие значения всех записей объекта DataSet, независимо от того, изменялись они или нет. Любой измененный элемент (запись) обозначается как diffgr:hasChanges="modified", а любой добавленный элемент (запись) — как diffgr:hasChanges="inserted". Второй раздел содержит исходные значения всех измененных и удаленных записей. Его элементы связаны с соответствующими элементами первого раздела, которые обозначаются как diffgr:id="xxx", где ххх — идентификатор записи. Третий раздел содержит информацию об ошибках работы с записями. Его элементы связаны аналогичным образом с соответствующими элементами первого раздела, которые обозначаются как diffgr:id="xxx".

Для генерации XML-файла в формате DiffGram нужно внести приведенные ниже изменения (они обозначены полужирным начертанием) в подпрограмму btnWriteXML_Click.H3 листинга 10.3.

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")

 ' Пример изменения, удаления и вставки новой записи.

 dsSales.Tables("Stores").Rows(0)("stor_id") = 999 ' Изменение

 dsSales.Tables("Stores").Rows(1).Delete '
Удаление

 Dim rr As DataRow = dsSales.Tables("Stores").NewRow

 rr("stor_name") = "New Store"

 dsSales.Tables("Stores").Rows.Add(rr) ' Вставка

 ' Сохранение только измененных записей в формате DiffGram.

 Dim ChangedDataSet = dsSales.GetChanges

 ChangedDataSet.WriteXml("…\Changes.xml", XmlWriteMode.DiffGram)

 ' Сохранение всех записей в формате DiffGram.

 dsSales.WriteXml("…\DiffGram.xml", XmlWriteMode.DiffGram)

End Sub

В листинге 10.6 приведено содержимое файла DiffGram.xml, полученного в результате щелчка на кнопке Write XML формы проекта ADO-XML. Внесенные в таблицу Stores изменения выделены полужирным начертанием. Удаленная запись отсутствует в разделе текущих данных, но присутствует в разделе исходного состояния вместе с исходным значением измененной записи. Кроме того, раздел с текущими данными содержит новую запись с отметкой "inserted" (вставлена).

Листинг 10.6. XML-файл DiffGram.xml в формате DiffGram с одной вставленной записью, одной удаленной записью и одной измененной записью

<?xml version="1.0" standalone="yes"?>

<diffgr:diffgram xmlns:msdata="urn:schemes-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">

 <NewDataSet>

<Sales diffgr:id="Sales1" msdata:rowOrder="0">

<stor_id>6380</stor_id>

<ord_num>6871</ord_num>

<ord_date>1994-09-14T00:00:00.0000000+02:00</ord_date>

<qty>5</qty>

<payterms>Net 60</payterms>

<title_id>BU1032</title_id>

</Sales>

<Sales diffgr:id="Sales2" msdata:rowOrder="1">

<stor_id>6380</stor_id>

<ord_num>722a</ord_num>

<ord_date>1994-09-13T00:00:00.0000000+02:00</ord_date>

<qty>3</qty>

<payterms>Net 60</payterms>

<title_id>PS2091</title_id>

</Sales>

<Sales diffgr:id="Sales3" msdata:rowOrder="2">

<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>

Поделиться с друзьями: