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
рейтинг книги
Кротовский, не начинайте
2. РОС: Изнанка Империи
Фантастика:
городское фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Под маской моего мужа
Любовные романы:
современные любовные романы
5.67
рейтинг книги
Элита элит
1. Элита элит
Фантастика:
боевая фантастика
8.93
рейтинг книги
Вперед в прошлое 3
3. Вперёд в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Темный Патриарх Светлого Рода 5
5. Темный Патриарх Светлого Рода
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 8
8. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Менталист. Революция
3. Выиграть у времени
Фантастика:
боевая фантастика
5.48
рейтинг книги
Маршал Советского Союза. Трилогия
Маршал Советского Союза
Фантастика:
альтернативная история
8.37
рейтинг книги
Штурм Земли
8. Пробуждение Системы
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Баоларг
12. Другая сторона
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Измена. Верну тебя, жена
2. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Законы Рода. Том 6
6. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00