включают задание пространства имен сценариев, добавление кода (который скопирован из VS.NET IDE) и выполнение вызова в таблице стилей. Вывод выглядит так же, как и в предыдущем примере.
Ключевой момент, о котором необходимо помнить при выполнении преобразований, состоит в том, чтобы не забыть использовать подходящее хранилище;
XPathDocument
, если не требуется редактирование,
XmlDataDocument
, если данные получают из ADO.NET, и
XmlDocument
, если необходимо иметь возможность редактировать данные. Процесс будет таким же, несмотря ни на что.
XML и ADO.NET
XML является средством, которое связывает ADO.NET с остальным миром. ADO.NET был создан для работы внутри среды XML. XML используется для преобразования данных в и из хранилища данных в приложение или страницу Web. Так как ADO.NET использует XML в качестве транспорта, то данными можно обмениваться с приложениями и системами, которые даже не знают об ADO.NET. Пока обрабатывается XML, они могут совместно использовать данные. ADO.NET может читать документы XML, возвращаемые из этих же приложений. В связи с важностью XML для ADO.NET, существует ряд полезных свойств ADO.NET, которые позволяют чтение и запись документов XML. Пространство имен XML содержит также классы, которые могут потреблять или утилизировать реляционные данные ADO.NET.
Данные ADO.NET в документе XML
Первый пример, который будет рассмотрен, использует потоки ADO.NET и XML для извлечения данных из базы данных
Northwind
в
DataSet
, загрузки объекта
XmlDocument
, содержащего XML, из
DataSet
, и загрузки XML в listbox аналогично тому, что делалось ранее. Чтобы выполнить несколько следующих примеров, необходимо добавить инструкции
using
:
using System.Data;
using System.Xml;
using System.Data.SqlClient;
using System.IO;
Также для примеров ADO в формы добавлены
DataGrid
, что позволит нам увидеть данные в
DataSet
из ADO.NET, так как они ограничены сеткой, а также данные из созданных документов XML, которые загружаются в
listbox
. Вот код первого примера, который можно найти в папке
//убедитесь,
что имя пользователя соответствует версии SqlServer
SqlConnection conn=
new SqlConnection(@"server=GLYNNJ_CS\NetSDK;uid=sa;pwd=;database=northwind");
SqlDataAdapter da=new SqDataAdapter("select * from products", conn);
После создания
SqlDataAdapter
,
da
и
DataSet
,
ds
создаются экземпляры объекта
MemoryStream
, объекта
StreamReader
и объекта
StreamWriter
. Объекты
StreamReader
и
StreamWriter
будут применять
MemoryStream
для перемещения XML:
MemoryStream memStrm=new MemoryStream;
StreamReader strmRead=new StreamReader(memStrm);
StreamWriter strmWrite=new StreamWriter(memStrm);
Мы будем использовать
MemoryStream
, поэтому ничего на диск записываться не будет, однако мы сможем применять любые объекты на основе класса
Stream
, такие как
FileStream
. Затем мы заполним
DataSet
и свяжем его с
DataGrid
. Данные из
DataSet
будут выводиться теперь в
DataGrid
:
da.Fill(ds, "products");
// загрузка данных в DataGrid
dataGrid1.DataSource=ds;
dataGrid1.DataMember="products";
На следующем шаге генерируется XML. Вызывается метод
WriteXml
из класса
DataSet
.
WriteXml
генерирует документ XML. Существуют две перегружаемые версии
WriteXml
, одна получает строку с путем доступа и именем файла, а в другом методе добавлен параметр режима
mode
. Этот
mode
является перечислением
XmlWriteMode
. Возможными значениями являются
DiffGram
,
IgnoreSchema
, и
WriteSchema
. Обсудим
DiffGram
позже в этом разделе.
IgnoreSchema
используется, если нежелательно, чтобы
WriteXml
записывал подставляемую (
inline
) схему в файл XML; используйте параметр
WriteSchema
, если это желательно. Чтобы получить именно схему, вызывается
WriteXmlSchema
. Этот метод имеет четыре перегружаемые версии. Одна получает строку, содержащую путь доступа и имя файла, куда записывается документ XML. Вторая версия использует объект, который основывается на классе
XmlWriter
. Третья версия использует объект, который основывается на классе
TextWriter
. Четвертая версия используется в примере, параметр в этом случае является производным от класса Stream: