Симон Робинсон - 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 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
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
, иначе не будет никакого различия между состоянием до того и после.
// записать схему
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
):
1
NewProdName
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
…
100
This is a new product
12
2
12
23
5
0
1
false
1
Chai
1
1
10 boxes x 20 bugs
18
39
0
10
false
Заметим, каким образом повторяется каждая строка DataTable
, и что существует атрибут diffgr:id
для каждого элемента . diffgr
является префиксом пространства имен для urn:schemas-microsoft-com:xml-diffgram-v1
. Для модифицированной строки и для вставленной строки ADO.NET добавляет атрибут diffgr:hasChanges
. Здесь есть также элемент после элемента , который содержит элемент , указывающий на предыдущее содержание всех модифицированных строк. Для добавленной строки не существует "before"
, поэтому здесь отсутствует элемент , однако он присутствует для модифицированной строки.
После того как DiffGram
считан в DataTable
, он оказывается в состоянии, в котором он был бы после выполнения изменений в данных перед вызовом AcceptChanges
. В этом месте можно на самом деле откатить изменения, вызывая метод RejectChanges
. Проверяя свойство DataRow.Item
и передавая либо DataRowVersion.Original
, либо DataRowVersion.Current
, можно увидеть значения в DataTable
перед и после изменений.
Интервал:
Закладка: