Симон Робинсон - C# для профессионалов. Том II
- Название:C# для профессионалов. Том II
- Автор:
- Жанр:
- Издательство:Лори
- Год:2003
- Город:Москва
- ISBN:5-85582-187-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Симон Робинсон - C# для профессионалов. Том II краткое содержание
Платформа .NET предлагает новую среду, в которой можно разрабатывать практически любое приложение, действующее под управлением Windows, а язык C# — новый язык программирования, созданный специально для работы с .NET.
В этой книге представлены все основные концепции языка C# и платформы .NET. Полностью описывается синтаксис C#, приводятся примеры построения различных типов приложений с использованием C# — создание приложений и служб Windows, приложений и служб WWW при помощи ASP.NET, а также элементов управления Windows и WWW Рассматриваются общие библиотеки классов .NET, в частности, доступ к данным с помощью ADO.NET и доступ к службе Active Directory с применением классов DirectoryServices.
Для кого предназначена эта книгаЭта книга предназначена для опытных разработчиков, возможно, имеющих опыт программирования на VB, C++ или Java, но не использовавших ранее в своей работе язык C# и платформу .NET. Программистам, применяющим современные технологии, книга даст полное представление о том, как писать программы на C# для платформы .NET.
Основные темы книги• Все особенности языка C#
• C# и объектно-ориентированное программирование
• Приложения и службы Windows
• Создание web-страниц и web-служб с помощью ASP NET
• Сборки .NET
• Доступ к данным при помощи ADO NET
• Создание распределённых приложений с помощью NET Remoting
• Интеграция с COM, COM+ и службой Active Directory
C# для профессионалов. Том II - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
ds.WriteXml("с:\\test\\sample.xml" , XmlWriteMode, WriteSchema);
…создается следующий XML. Отметим, что мы включили в документ схему XSD. Если нежелательно, чтобы схема включалась в файл, то можно передать член перечисления XmlWriteMode.IgnoreSchema
:
1
Chai
1
1
10 boxes x 20 bags
18
39
0
10
false
2
Chang
1
1
24 - 12 oz bottles
19
17
40
25
false
Показаны только два первых продукта. Реальный файл XML будет содержать все продукты из таблицы Products
базы данных Northwind
.
Это выглядит достаточно просто для одной таблицы, но что будет для реляционных данных, таких как несколько DataTables
и Relations
в DataSet
? Все по-прежнему работает таким же образом. Внесем следующие изменения в коде (эту версию можно найти в ADOSample3
):
private void button1_Click(object sender, System.EventArgs e) {
//создать множество данных (DataSet)
DataSet ds=new DataSet("XMLProducts");
// соединиться с базой данных northwind и
//выбрать все строки из таблицы products и таблицы suppliers
//проверьте, что строка соединения соответствует конфигурации сервера
SqlConnection conn=
new SqlConnection(@"server=GLYNNJ_CS\NetSDK;uid=sa;pwd=;database=northwind");
SqlDataAdapter daProd=new SqlDataAdapter("select * from products", conn);
SqlDataAdapter daSup=new SqlDataAdapter("select * from suppliers", conn);
//Заполнить DataSet из обоих SqlAdapters
daProd.Fill(ds, "products");
daSup.Fill(ds, "suppliers");
//Добавить отношение
ds.Relations.Add(ds.Tables["suppliers"].Columns["SupplierId"],
ds.Tables["products"].Columns["SupplierId"]);
//Записать Xml в файл, чтобы можно было просмотреть его позже
ds.WriteXml("..\\..\\..\\SuppProd.xml", XmlWriteMode.WriteSchema);
//загрузить данные в таблицу
dataGrid1.DataSource=ds;
dataGrid1.DataMember="suppliers";
//создать XmlDataDocument
doc=new XmlDataDocument(ds);
//Выбрать элементы productname и загрузить их в таблицу
XmlNodeList nodeLst=doc.SelectNodes("//ProductName");
foreach(XmlNode nd in nodeLst) listBox1.Items.Add(nd.InnerXml);
}
В этом примере создаются два объекта DataTables
в DataSet
из XMLProducts
: Products
и Suppliers
. Отношение состоит в том, что Suppliers
(Поставщики) поставляют Products
(Продукты). Мы создаем новое отношение на столбце SupplierId
в обоих таблицах. Вот как выглядит DataSet
:

Делая такой же вызов метода WriteXml
, как в предыдущем примере, мы получим следующий файл XML ( SuppProd.xml
):
1
Chai
1
1
10 boxes x 20 bags
18
39
0
10
false
2
Chang
1
1
24 - 12 oz bottles
19
17
40
25
false
1
Exotiс Liquids
Charlotte Cooper
Purchasing Manager
49 Gilbert St.
London
EC1 4SD
UK
(171) 555-2222
2
New Orleans Cajun Delights
Shelley Burke
Order Adminisirator
P.O. Box 78934
New Orleans
LA
70117
USA
(100) 555-4822
#CAJUN.HTM#
Эта схема включает в себя обе таблицы данных DataTables
, которые находились в DataSet
. Данные также содержат все данные из обеих таблиц. Несколько продуктов и поставщиков были удалены из окончательного файла, чтобы сэкономить пространство. Как и раньше, можно сохранить только схему или только данные, передавая соответствующий параметр XmlWriteMode
.
Преобразование документа XML в данные ADO.NET
Предположим что имеется документ XML, который нужно поместить в DataSet
ADO.NET. И вы хотите сделать это так. чтобы можно было загрузить XML в базу данных, или, может быть, связать данные с управляющим элементом данных .NET, таким как DataGrid
. Таким образом, можно будет на самом деле использовать документ XML в качестве хранилища данных, и можно будет полностью исключить накладные расходы, связанные с базой данных. Вот некоторый код для начала ( ADOSample4
):
private void button1_Click(object sender, System.EventArgs e) {
// создать новое множество данных (DataSet)
DataSet ds=new DataSet("XMLProducts");
//считать документ Xml в Dataset
ds.ReadXml("..\\..\\..\\prod.xml");
//загрузить данные в таблицу
detaGrid1.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
. Вызывается метод 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
:
Интервал:
Закладка: