Выбрать главу

 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>

   <title_id>PC8888</title_id>

  </Sales>

  <Sales diffgr:id="Sales4" msdata:rowOrder="3">

   <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>PS2091</title_id>

  </Sales>

  <Sales diffgr:id="Sales5" msdata:rowOrder="4">

   <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 diffgr:id="Sales6" msdata:rowOrder="5">

   <stor_id>7067</stor_id>

   <ord_num>P2121</ord_num>

   <ord_date>1992-06-15T00:00:00.0000000+02:00</ord_date>

   <qty>40</qty>

   <payterms>Net 30</payterms>

   <title_id>TC3218</title_id>

  </Sales>

  <Sales diffgr:id="Sales7" msdata:rowOrder="6">

   <stor_id>7067</stor_id>

   <ord_num>P2121</ord_num>

   <ord_date>1992-06-15T00:00:00.0000000+02:00</ord_date>

   <qty>20</qty>

   <payterms>Net 30</payterms>

   <title_id>TC4203</title_id>

  </Sales>

  <Sales diffgr:id="Sales8" msdata:rowOrder="7">

   <stor_id>7067</stor_id>

   <ord_num>P2121</ord_num>

   <ord_date>1992-06-15T00:00:00.0000000+02:00</ord_date>

   <qty>20</qty>

   <payterms>Net 30</payterms>

   <title_id>TC7777</title_id>

  </Sales>

  <Sales diffgr:id="Sales9" msdata:rowOrder="8">

   <stor_id>713K/stor_id>

   <ord_num>N914008</ord_num>

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

   <qty>20</qty>

   <payterms>Net 30</payterms>

   <title_id>PS2091</title_id>

  </Sales>

  <Sales diffgr:id="Sales10" msdata:rowOrder="9">

   <stor_id>7131</stor_id>

   <ord_num>N914014</ord_num>

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

   <qty>25</qty>

   <payterms>Net 30</payterms>

   <title_id>MC3021</title_id>

  </Sales>

  <Sales diffgr:id="Sales11" msdata:rowOrder="10">

   <stor_id>7131</stor_id>

   <ord_num>P3087a</ord_num>

   <ord_date>1993-05-29T00:00:00.0000000+02:00</ord_date>

   <qty>20</qty>

   <payterms>Net 60</payterms>

   <title_id>PS1372</title_id>

  </Sales>

  <Sales diffgr:id="Sales12" msdata:rowOrder="11">

   <stor_id>7131</stor_id>

   <ord_num>P3087a</ord_num>

   <ord_date>1993-05-29T00:00:00.0000000+02:00</ord_date>

   <qty>25</qty>

   <payterms>Net 60</payterms>

   <title_id>PS2106</title_id>

  </Sales>

  <Sales diffgr:id="Sales13" msdata:rowOrder="12">

   <stor_id>7131</stor_id>

   <ord_num>P3087a</ord_num>

   <ord_date>1993-05-29T00:00:00.0000000+02:00</ord_date>

   <qty>15</qty>

   <payterms>Net 60</payterms>

   <title_id>PS3333</title_id>

  </Sales>

  <Sales diffgr:id="Sales14" msdata:rowOrder="13">

   <stor_id>7131</stor_id>

   <ord_num>P3087a</ord_num>