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

Ватсон Карли

Шрифт:

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
):

<?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>

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

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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