Синхронизация DataSet и XmlDataDocument (ADO.NET)
Обновлен: November 2007
ADO.NET DataSet обеспечивает реляционное представление данных. Для доступа к иерархическим данным можно использовать классы XML, доступные на платформе .NET Framework. Исторически эти два представления данных использовались раздельно. Однако платформа .NET Framework обеспечивает динамический синхронный доступ, как к реляционным, так и иерархическим представлениям данных через объект DataSet и объект XmlDataDocument соответственно.
Когда объект DataSet синхронизирован с объектом XmlDataDocument, оба они работают с одним набором данных. Это означает, что при изменении в объекте DataSet изменения отражаются в XmlDataDocument и наоборот. Взаимосвязь между объектами DataSet и XmlDataDocument обеспечивает высокую гибкость, так как одно приложение, использующее один набор данных, может обращаться ко всему комплексу служб, построенных на основе DataSet (например, элементов управления Web Forms и Windows Forms, конструкторов Visual Studio .NET), а также комплексу XML-служб, в том числе расширяемому языку таблицы стилей (XSL), преобразованиям XSL (XSLT) и языку XML Path (XPath). Не обязательно выбирать конкретный набор служб для приложения. Доступны оба.
Есть несколько способов синхронизации DataSet с XmlDataDocument. Можно выполнить следующие действия.
Заполнить объект DataSet схемой (то есть, реляционной структурой) и данными, а затем синхронизировать его с новым объектом XmlDataDocument. Это обеспечивает иерархическое представление существующих реляционных данных. Например:
Dim dataSet As DataSet = New DataSet ' Add code here to populate the DataSet with schema and data. Dim xmlDoc As XmlDataDocument = New XmlDataDocument(dataSet)
DataSet dataSet = new DataSet(); // Add code here to populate the DataSet with schema and data. XmlDataDocument xmlDoc = new XmlDataDocument(dataSet);
Заполните объект DataSet только схемой (например, строго типизированным DataSet), синхронизируйте его с XmlDataDocument, а затем загрузите объект XmlDataDocument из XML-документа. Это обеспечивает реляционное представление существующих иерархических данных. Имена таблиц и имена столбцов в схеме DataSet должны соответствовать именам XML-элементов, с которыми их нужно синхронизировать. Это соответствие с учетом регистра.
Обратите внимание, что схема DataSet должна соответствовать только XML-элементам, которые нужно показать в реляционном представлении. Таким образом, может существовать очень большой XML-документ и очень малое реляционное «окно» для этого документа. Объект XmlDataDocument сохраняет XML-документ целиком, даже притом, что в объекте DataSet показана лишь малая его часть. (Подробный пример см. в разделе Синхронизация DataSet с XmlDataDocument (ADO.NET).)
В следующем примере кода показаны шаги создания объекта DataSet и заполнения его схемы, а затем его синхронизации с объектом XmlDataDocument. Обратите внимание, что схема DataSet должна соответствовать только элементам из XmlDataDocument, которые нужно показать с помощью объекта DataSet.
Dim dataSet As DataSet = New DataSet ' Add code here to populate the DataSet with schema, but not data. Dim xmlDoc As XmlDataDocument = New XmlDataDocument(dataSet) xmlDoc.Load("XMLDocument.xml")
DataSet dataSet = new DataSet(); // Add code here to populate the DataSet with schema, but not data. XmlDataDocument xmlDoc = new XmlDataDocument(dataSet); xmlDoc.Load("XMLDocument.xml");
Нельзя загрузить объект XmlDataDocument, если он синхронизирован с объектом DataSet, в котором есть данные. В таком случае возникнет исключение.
Создайте новый объект XmlDataDocument и загрузите его из XML-документа, затем обратитесь к реляционному представлению данных с помощью свойства DataSet объекта XmlDataDocument. Необходимо установить схему DataSet до того, как появится возможность просмотреть любые данные в XmlDataDocument с помощью DataSet. Отметим еще раз: имена таблиц и имена столбцов в схеме DataSet должны соответствовать именам XML-элементов, с которыми их нужно синхронизировать. Это соответствие с учетом регистра.
В следующем примере кода показано обращение к реляционному представлению данных в объекте XmlDataDocument.
Dim xmlDoc As XmlDataDocument = New XmlDataDocument Dim dataSet As DataSet = xmlDoc.DataSet ' Add code here to create the schema of the DataSet to view the data. xmlDoc.Load("XMLDocument.xml")
XmlDataDocument xmlDoc = new XmlDataDocument(); DataSet dataSet = xmlDoc.DataSet; // Add code here to create the schema of the DataSet to view the data. xmlDoc.Load("XMLDocument.xml");
Еще одно преимущество синхронизации XmlDataDocument с DataSet заключается в точном сохранении XML-документа. Если объект DataSet заполнен из XML-документа с помощью ReadXml, то при обратной записи данных как XML-документа с использованием WriteXml отличия от исходного XML-документа могут быть существенными. Причина в том, что DataSet не сохраняет элементов форматирования XML-документа, в частности, пробелов или иерархических данных, например порядок элементов. Объект DataSet также не содержит элементов из XML-документа, которые были пропущены, поскольку не соответствуют схеме Dataset. Синхронизация объекта XmlDataDocument с DataSet позволяет сохранить форматирование и иерархическую структуру элементов исходного XML-документа в объекте XmlDataDocument, а объект DataSet содержит данные и сведения схемы, подходящие для объекта DataSet.
При синхронизации объекта DataSet с объектом XmlDataDocument могут быть получены различные результаты в зависимости от того, используются ли вложенные объекты DataRelation. Дополнительные сведения см. в разделе Вложенность объектов DataRelation (ADO.NET).
В этом подразделе
Синхронизация DataSet с XmlDataDocument (ADO.NET)
Демонстрирует синхронизацию строго типизированного объекта DataSet с минимальной схемой, с объектом XmlDataDocument.Выполнение запроса XPath над DataSet (ADO.NET)
Демонстрирует выполнение запроса XPath к содержимому DataSet.Применение XSLT-преобразования к DataSet (ADO.NET)
Демонстрирует применение XSLT-преобразования к содержимому DataSet.
Связанные подразделы
Использование XML в DataSet (ADO.NET)
Описывает взаимодействие объекта DataSet с XML как источником данных, в том числе загрузку и сохранение содержимого объекта DataSet как XML-данных.Вложенность объектов DataRelation (ADO.NET)
Показывает важность вложенных объектов DataRelation при представлении содержимого объекта DataSet как XML-данных и описывает создание этих связей.Объекты DataSet, DataTable и DataView (ADO.NET)
Описывает объект DataSet и использование его для управления данными приложений и взаимодействием с источниками данных, в том числе с реляционными базами данных и XML.Класс XmlDataDocument
Содержит справочные сведения о классе XmlDataDocument.