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

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

Жанры

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

Ватсон Карли

Шрифт:

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

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
:

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

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

 DataSet ds=new DataSet("XMLProducts");

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

 SqlConnection conn=

new SqlConnection(@"server=GLYNNJ_CS\NetSDK;uid=sa;pwd=;database=northwind");

 SqlDataAdapter da=new SqlDataAdapter("select * from products", conn);

 // заполнить DataSet

 da.Fill(ds, "products");

 // редактируем первую строку

 ds.Tables["products"].Rows[0]["ProductName"] = "NewProdName";

В следующем разделе мы сделаем следующие преобразования. Во-первых, изменим столбец

ProductName
в первой строке на
NewProdName
. Во-вторых, создадим новую строку в
DataTable
, задавая значения столбцов и добавляя в конце новую строку данных в
DataTable
.

 // добавить новую строку

 DataRow dr=ds.Tables["products"].NewRow;

 dr["ProductId"]=100;

 dr["CategoryId"]=2;

 dr["Discontinued"]=false;

 dr["ProductName"]="This is the new product";

 dr["QuantityPerUnit"]=12;

 dr["ReorderLevel"]=1;

 dr["SupplierId"]=12;

 dr["UnitPrice"]=23;

 dr["UnitsInStock"]=5;

 dr["UnitsOnOrder"]=0;

 Tables["products"].Rows.Add(dr);

Это интересная часть кода. Прежде всего записывается схема с помощью

WriteXmlSchema
. Это важно, так как нельзя будет заново считать в
DiffGram
без схемы.
WriteXml
с переданным в него параметром
XmlWriteMode.DiffGram
создает в действительности
DiffGram
. Следующая строка принимает сделанные изменения. Важно то, что
DiffGram
создается до вызова
AcceptChanges
, иначе не будет никакого различия между состоянием до того и после.

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

Крепость над бездной

Лисина Александра
4. Гибрид
Фантастика:
боевая фантастика
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Крепость над бездной

Новик

Ланцов Михаил Алексеевич
2. Помещик
Фантастика:
альтернативная история
6.67
рейтинг книги
Новик

Мир-о-творец

Ланцов Михаил Алексеевич
8. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Мир-о-творец

Курсант: Назад в СССР 10

Дамиров Рафаэль
10. Курсант
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Курсант: Назад в СССР 10

Третий. Том 3

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий. Том 3

Эволюционер из трущоб. Том 2

Панарин Антон
2. Эволюционер из трущоб
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Эволюционер из трущоб. Том 2

Газлайтер. Том 9

Володин Григорий
9. История Телепата
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Газлайтер. Том 9

Начальник милиции 2

Дамиров Рафаэль
2. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции 2

Зеркало силы

Кас Маркус
3. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Зеркало силы

Кротовский, сколько можно?

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

Машенька и опер Медведев

Рам Янка
1. Накосячившие опера
Любовные романы:
современные любовные романы
6.40
рейтинг книги
Машенька и опер Медведев

Убивать чтобы жить 7

Бор Жорж
7. УЧЖ
Фантастика:
героическая фантастика
космическая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 7

1941: Время кровавых псов

Золотько Александр Карлович
1. Всеволод Залесский
Приключения:
исторические приключения
6.36
рейтинг книги
1941: Время кровавых псов

Архил...? 4

Кожевников Павел
4. Архил...?
Фантастика:
фэнтези
попаданцы
альтернативная история
5.50
рейтинг книги
Архил...? 4