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

на главную - закладки

Жанры

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

// записать схему

ds.WriteXmlSchema("..\\..\\..\\diffgram.xsd");

// создать DiffGram

ds.WriteXml("..\\..\\..\\diffgram.xml", XmlWriteMode.DiffGram);

ds.AcceptChanges;

// загрузить данные в сетку

dataGrid1.DataSource=ds;

dataGrid1.DataMember="products";

// новый объект XmlDataDocument

doc=new XmlDataDocument(ds);

//
загрузить имена продуктов в список

XmlNodeList nodeLst=doc.SelectNodes("//ProductName");

foreach (XmlNode nd in nodeLst) listBox1.Items.Add(nd.InnerXml);

Чтобы вернуть данные в множество DataSet, можно сделать следующее:

DataSet dsNew = new DataSet;

dsNew.ReadXmlSchema("..\\..\\..\\diffgram.xsd");

dsNew.XmlRead("..\\..\\..\\diffgram.xml", XmlReadMode.DiffGram);

В этом примере создается новый объект множества данных

DataSet
,
dsNew
. Вызов метода
ReadXmlSchema
создает новый объект
DataTable
на основе информации схемы. В данном случае он будет клоном
DataTable
продуктов. Теперь можно считать в
DiffGram
.
DiffGram
не содержит информации о схеме, поэтому важно, чтобы объект
DataTable
был создан и готов к использованию до вызова метода
ReadXml
. Вот образец того, как выглядит
DiffGram
(
diffgram.xml
):

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

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

<XMLProducts>

<products diffgr:id="products1" msdata:rowOrder="0" diffgr:hasChanged="modified">

<ProductID>1</ProduсtID>

<ProductName>NewProdName</ProductName>

<SupplierID>1</SupplierID>

<CategoryID>1</CategoryID>

<QuantityPerUnit>10 boxes x 20 bags</QuantityPerUnit>

<UnitPrice>18</UnitPrice>

<UnitsInStock>39</UnitsInStock>

<UnitsOnOrder>0</UnitsOnOrder>

<ReorderLevel>10</ReorderLevel>

<Discontinued>false</Discontinued>

</products>

<products diffgr:id="products2" msdata:rowOrder="1">

<ProductID>2</ProductID>

<ProduсtName>Chang</ProductName>

<SupplierID>1</SupplierID>

<CategoryID>1</CategoryID>

<QuantityPerUnit>24 - 12 oz bottles</QuantityPerUnit>

<UnitPrice>19</UnitPrice>

<UnitsInStock>17</UnitsInStock>

<UnitsOnOrder>40</UnitsOnOrder>

<ReorderLevel>25</ReorderLevel>

<Discontinued>false</Discontinued>

</products>

<products diffgr:id="products78" msdata:rowOrder="77" diffgr:hasChanges="inserted">

<ProductID>100</ProductID>

<ProductName>This is a new product</ProductName>

<SupplierID>12</SupplierID>

<CategoryID>2</CategoryID>

<QuantityPerUnit>12</QuantityPerUnit>

<UnitPrice>23</UnitPrice>

<UnitsInStock>5</UnitsInStock>

<UnitsOnOrder>0</UnitsOnOrder>

<ReorderLevel>1</ReorderLevel>

<Discontinued>false</Discontinued>

</products>

</XMLProducts>

<diffgr:before>

<products diffgr:id="products1" msdata:rowOrder="0">

<ProductID>1</ProductID>

<ProductName>Chai </ProductName>

<SupplierID>1</SupplierID>

<CategoryID>1</CategoryID>

<QuantityPerUnit>10 boxes x 20 bugs </QuantityPerUnit>

<UnitPrice>18</UnitPrice>

<UnitsInStock>39</UnitsInStock>

<UnitsOnOrder>0</UnitsOnOrder>

<ReorderLevel>10</ReorderLevel>

<Discontinued>false</Discontinued>

</products>

</diffgr:before>

</diffgr:diffgram>

Заметим,

каким образом повторяется каждая строка
DataTable
, и что существует атрибут
diffgr:id
для каждого элемента
<products>
.
diffgr
является префиксом пространства имен для
urn:schemas-microsoft-com:xml-diffgram-v1
. Для модифицированной строки и для вставленной строки ADO.NET добавляет атрибут
diffgr:hasChanges
. Здесь есть также элемент
<diffgr:before>
после элемента
<XMLProducts>
, который содержит элемент
<products>
, указывающий на предыдущее содержание всех модифицированных строк. Для добавленной строки не существует
"before"
, поэтому здесь отсутствует элемент
<diffgr:before>
, однако он присутствует для модифицированной строки.

Поделиться:
Популярные книги

Род Корневых будет жить!

Кун Антон
1. Тайны рода
Фантастика:
фэнтези
попаданцы
аниме
7.00
рейтинг книги
Род Корневых будет жить!

Найди меня Шерхан

Тоцка Тала
3. Ямпольские-Демидовы
Любовные романы:
современные любовные романы
короткие любовные романы
7.70
рейтинг книги
Найди меня Шерхан

Своя правда

Шебалин Дмитрий Васильевич
2. Чужие интересы
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Своя правда

Бесприданница

Барох Лара
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Бесприданница

Наследник павшего дома. Том II

Вайс Александр
2. Расколотый мир [Вайс]
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наследник павшего дома. Том II

Дочь моего друга

Тоцка Тала
2. Айдаровы
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Дочь моего друга

Возвышение Меркурия. Книга 4

Кронос Александр
4. Меркурий
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Возвышение Меркурия. Книга 4

Адвокат Империи 3

Карелин Сергей Витальевич
3. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Адвокат Империи 3

Тепла хватит на всех

Котов Сергей
1. Миры Пентакля
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Тепла хватит на всех

Тактик

Земляной Андрей Борисович
2. Офицер
Фантастика:
альтернативная история
7.70
рейтинг книги
Тактик

Граф Суворов 7

Шаман Иван
7. Граф Суворов
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Граф Суворов 7

Барон играет по своим правилам

Ренгач Евгений
5. Закон сильного
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Барон играет по своим правилам

Черный Маг Императора 9

Герда Александр
9. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 9

Кукловод

Майерс Александр
4. Династия
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Кукловод