Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

 doc=new XmlDataDocument(ds);

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

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

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

}

Действительно, просто. Создается экземпляр нового объекта

DataSet
. Вызывается метод
ReadXml
, и XML оказывается в
DataTable
в
DataSet
. Как и методы
WriteXml
,
ReadXml
имеет параметр
XmlReadMode
и пару дополнительных опций в
XmlReadMode
. Они приводятся в следующей таблице:

Имя перечисления Описание
Auto
Задает для
XmlReadMode
наиболее подходящее значение. Если данные находятся в формате
DiffGram
, выбирается
DiffGram
. Если схема уже была прочитана, или если обнаружена подставляемая схема, то выбирается
ReadSchema
. Если с
DataSet
не связано ни одной схемы и не обнаружена подставляемая схема, то выбирается
IgnoreSchema
.
DiffGram
Считывает в документ
DiffGram
и применяет изменения к
DataSet
.
DiffGram
описан далее в этой главе.
Fragment
Считывает документы, которые содержат фрагменты схемы XDR, такие как тип, созданный SQL Server.
IgnoreSchema
Игнорирует подставляемую схему, которая может быть обнаружена. Считывает данные в текущую схему
DataSet
. Если данные не соответствуют схеме
DataSet
, они отбрасываются.
InferSchema
Игнорирует любую подставляемую схему. Создает схему на основе данных в документе XML. Если она существует в
DataSet
, используется эта схема, расширяемая дополнительными столбцами и таблицами. Если столбец существует, но имеет другой тип данных, порождается исключение.
ReadSchema
Считывает подставляемую схему и загружает данные. Не будет перезаписывать схему в
DataSet
, но будет порождать исключение, если таблица в подставляемой схеме уже существует в
DataSet
. 

Существует также метод

ReadSchema
. Он будет считывать автономную схему и создавать таблицы, столбцы и отношения соответственно. Этот метод используется, если схема не поставляется вместе с данными.
ReadSchema
имеет те же четыре перегружаемые версии, строку с именем файла и путем доступа, объект на основе
Stream, объект
на основе
TextReader
и объект на основе
XmlReader
.

Чтобы показать, что таблицы данных будут созданы правильно, загрузим документ XML, который содержит таблицы

Products
и
Suppliers
, использовавшиеся в предыдущем примере. В этот раз, однако, загрузим в
listbox
имена
DataTable
, имена
DataColumn
и тип данных. Мы можем сравнить это с первоначальной базой данных
Northwind
, чтобы убедиться, что все по-прежнему хорошо. Вот код, который будет применяться и который можно найти в
ADOSample5
:

private void button1_Click(object sender, System.EventArgs e) {

 // создать DataSet

 DataSet ds=new DataSet("XMLProducts");

 // считать документ xml

 ds.ReadXml("..\\..\\..\\SuppProd.xml");

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

 dataGrid1.DataSource=ds;

 dataGrid1.DataMember="products";

 // загрузить в listbox информацию о таблицах, столбцах и типах данных

 foreach(DataTable dt in ds.Tables) {

listBox1.Items.Add(dt.TableName);

foreach(DataColumn col in dt.Columns) {

listBox1.Items.Add('\t' + col.ColumnName + " - " + col.DataType.FullName);

}

 }

}

Отметим добавление двух циклов

foreach
(выделенных полужирным шрифтом). Первый цикл извлекает имя таблицы из каждой таблицы в коллекции таблиц
DataSet
. Внутри цикла
foreach
извлекаются имя и тип данных каждого столбца в
DataTable
. Эти данные загружаются в
listbox
, чтобы их можно было вывести. Вот что мы должны увидеть на экране:

Посмотрев на

listbox
, можно увидеть, что
DataTables
были созданы с помощью столбцов, которые имеют правильные имена и типы данных.

Кроме того, можно заметить, что последние два примера не преобразуют никаких данных в или из базы данных, таким образом, не определены

SqlDataAdapters
или
SqlConnections
. Это дает начальное представление о реальной гибкости пространства имен
System.Xml
и ADO.NET. Можно посмотреть на одни и те же данные в множестве форматов. Если понадобиться сделать преобразование и показать данные в формате HTML или необходимо связать их с сеткой, возьмите те же самые данные и с помощью вызова метода получите их в нужном формате.

Запись и чтение DiffGram

DiffGram
является документом XML, который содержит данные до и после сеанса редактирования, включающего любую комбинацию изменений данных, добавлений и удалений.
DiffGram
может использоваться как аудиторский журнал или для процесса подтверждения/отката. Большинство систем DBMS сегодня имеют такое встроенное средство. Но если придется работать с DBMS, которая не имеет таких свойств или если хранилищем данных является XML и отсутствует DBMS, то можно будет самостоятельно реализовать свойства подтверждения/отката.

Далее представлен код, показывающий, как

DiffGram
создается и как
DataSet
можно создать из
DiffGram:pwd
(он находится в папке
ADOSample6
). Начальная часть этого кода должна быть уже знакома. Мы определяем и задаем новый объект
DataSet
,
ds
, новый объект
SqlConnection
,
conn
и новый объект
SqlDataAdapter
,
da
. Мы соединяемся с базой данных, выбираем все строки из таблицы
Products
, создаем новый объект
DataTable
с именем
products
и загружаем данные из базы данных в
DataSet
:

  • Читать дальше
  • 1
  • ...
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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