Ватсон Карли
Шрифт:
// создать множество данных (DataSet)
DataSet ds=new DataSet("XMLProducts");
// соединиться с базой данных northwind и
//выбрать все строки из таблицы products
//выполнить изменения в строке подключения с учетом имени пользователя и имени сервера
SqlConnection conn=
new SqlConnection(@"server=GLYNNJ_CS\NetSDK;uid=sa;pwd=;database=northwind");
SqlDataAdapter da=new SqlDataAdapter("select * from products", conn);
// заполнить множество данных
da.Fill(ds, "products");
// загрузить данные в сетку
dataGrid1.DataSource=ds;
dataGrid1.DataMember="products";
doc=new XmlDataDocument(ds);
// извлечь все элементы продуктов
XmlNodeList nodeLst=doc.GetElementsByTagName("ProductName");
// загрузить их в окно списка
// здесь используется цикл for
for(int ctr=0; ctr<nodeLst.Count; ctr++) listBox1.Items.Add(nodeLst[ctr].InnerText);
}
Как можно видеть, код для загрузки
DataSet
в документ XML был упрощен. Вместо использования класса XmlDocument
, используется класс XmlDataDocument
. Этот класс был создан специально для использования данных с объектом DataSet
. XmlDataDocument
базируется на классе XmlDocument
, поэтому он имеет всю функциональность класса XmlDocument
. Одним из основных отличий является перегруженный конструктор для XmlDataDocument
. Отметим строку кода, где создается экземпляр XmlDataDocument
: XmlDataDocument doc=new XmlDataDocument(ds);
Он передает в качестве параметра созданный объект
DataSet
, ds
. Документ XML создается из множества данных, поэтому не требуется использование метода Load
. Существует также свойство DataSet
, которое может задаваться с помощью текущего свойства DataSet
. Фактически, если создается новый объект XmlDataDocument
без передачи DataSet
в качестве параметра, то он содержит объект DataSet
с именем NewDataSet
, который не имеет DataTables
в коллекции таблиц. Существует также свойство DataSet
, которое можно установить после создания объекта на основе XmlDataDocument
. Если после вызова DataSet.Fill
добавляется следующая строка кода: ds.WriteXml("с:\\test\\sample.xml" , XmlWriteMode, WriteSchema);
…создается следующий XML. Отметим, что мы включили в документ схему XSD. Если нежелательно, чтобы схема включалась в файл, то можно передать член перечисления
XmlWriteMode.IgnoreSchema
: <?xml version="1.0" standalone="yes"?>
<XMLProducts>
<xsd:schema id="XMLProducts" targetNamespace="" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="XMLProducts" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="products">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ProductID" type="xsd:int" minOccurs="0" />
<xsd:element name="ProductName" type="xsd:string" minOccurs="0" />
<xsd:element name="SupplierID" type="xsd:int" minOccurs ="0" />
<xsd:element name="CategoryID" type="xsd:int" minOccurs="0" />
<xsd:element name="QuantityPerUnit" type="xsd:string" minOccurs="0" />
<xsd:element name="UnitPrice" type="xsd:decimal" minOccurs="0" />
<xsd:element name="UnitsInStock" type="xsd:short" minOccurs="0" />
<xsd:element name="UnitsOnOrder" type="xsd:short" minOccurs="0" />
<xsd:element name="ReorderLevel" type="xsd:short" minOccurs="0" />
<xsd:element name="Discontinued" type="xsd:boolean" minOccurs="0" />
</xsd:sequence>
</xsd:сomplexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>