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

на главную

Жанры

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>
, однако он присутствует для модифицированной строки.

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

Путь Чести

Щукин Иван
3. Жизни Архимага
Фантастика:
фэнтези
боевая фантастика
6.43
рейтинг книги
Путь Чести

Идеальный мир для Социопата 3

Сапфир Олег
3. Социопат
Фантастика:
боевая фантастика
6.17
рейтинг книги
Идеальный мир для Социопата 3

Кротовский, не начинайте

Парсиев Дмитрий
2. РОС: Изнанка Империи
Фантастика:
городское фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Кротовский, не начинайте

Под маской моего мужа

Рам Янка
Любовные романы:
современные любовные романы
5.67
рейтинг книги
Под маской моего мужа

Элита элит

Злотников Роман Валерьевич
1. Элита элит
Фантастика:
боевая фантастика
8.93
рейтинг книги
Элита элит

Вперед в прошлое 3

Ратманов Денис
3. Вперёд в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 3

Темный Патриарх Светлого Рода 5

Лисицин Евгений
5. Темный Патриарх Светлого Рода
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода 5

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

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

Менталист. Революция

Еслер Андрей
3. Выиграть у времени
Фантастика:
боевая фантастика
5.48
рейтинг книги
Менталист. Революция

Маршал Советского Союза. Трилогия

Ланцов Михаил Алексеевич
Маршал Советского Союза
Фантастика:
альтернативная история
8.37
рейтинг книги
Маршал Советского Союза. Трилогия

Штурм Земли

Семенов Павел
8. Пробуждение Системы
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Штурм Земли

Баоларг

Кораблев Родион
12. Другая сторона
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Баоларг

Измена. Верну тебя, жена

Дали Мила
2. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Верну тебя, жена

Законы Рода. Том 6

Flow Ascold
6. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 6