Поделиться через


Синхронизация "DataSet" и "XmlDataDocument"

DataSet ADO.NET предоставляет реляционное представление данных. Для иерархического доступа к данным можно использовать классы XML, доступные в .NET Framework. Исторически эти два представления данных использовались отдельно. Однако платформа .NET Framework обеспечивает синхронный доступ как к реляционным, так и иерархическим представлениям данных через DataSet объект и XmlDataDocument объект соответственно.

DataSet При синхронизации с XmlDataDocument оба объекта работают с одним набором данных. Это означает, что если в набор данных внесены изменения, это изменение будет отражено в XmlDataDocument и наоборот. Связь между DataSet и XmlDataDocument создает большую гибкость, позволяя одному приложению, используя один набор данных, получить доступ ко всему набору служб, построенных вокруг DataSet (таких как элементы управления Web Forms и Windows Forms, и конструкторы Visual Studio .NET), а также к набору XML-служб, включая расширяемый язык стилей (XSL), преобразования XSL (XSLT) и язык XML-путей (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 (например, строго типизированный набор данных), синхронизируйте ее с XmlDataDocument, а затем загрузите XmlDataDocument из XML-документа. Это обеспечивает реляционное представление существующих иерархических данных. Имена таблиц и имена столбцов в схеме DataSet должны совпадать с именами XML-элементов, с которыми они синхронизируются. Это сопоставление учитывает регистр.

    Обратите внимание, что схема DataSet только должна соответствовать XML-элементам, которые необходимо предоставить в реляционном представлении. Таким образом, вы можете иметь очень большой XML-документ и очень небольшое реляционное "окно" на этот документ. Сохраняет XmlDataDocument весь XML-документ, несмотря на то, что DataSet только предоставляет небольшую часть документа. (Подробный пример этого см. в разделе Синхронизация набора данных с xmlDataDocument.)

    В следующем примере кода показаны шаги по созданию DataSet и заполнению схемы, а затем синхронизации ее с xmlDataDocument. Обратите внимание, что схема DataSet должна соответствовать только тем элементам из XmlDataDocument, которые необходимо предоставить с помощью набора данных.

    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. Перед просмотром любых данных в XmlDataDocument нужно задать схему DataSet с помощью 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 с a DataSet является сохранение точности XML-документа. Если DataSet заполняется из XML-документа с помощью ReadXml, то при записи данных обратно как XML-документ с помощью WriteXml они могут существенно отличаться от исходного XML-документа. Это связано с тем, что DataSet не поддерживает форматирование, такое как пробелы, или иерархические данные, такие как порядок элементов, из XML-документа. Он DataSet также не содержит элементы из XML-документа, которые были проигнорированы, так как они не соответствовали схеме набора данных. Синхронизация XmlDataDocument с DataSet позволяет сохранить форматирование и структуру иерархических элементов исходного XML-документа в XmlDataDocument, в то время как DataSet содержит только данные и информацию о схеме, соответствующую DataSet.

При синхронизации DataSet с XmlDataDocument результаты могут отличаться в зависимости от того, вложены ли ваши объекты DataRelation. Для получения дополнительной информации см. раздел «Вложенные отношения данных».

В этом разделе

Синхронизация набора данных с xmlDataDocument Демонстрирует синхронизацию строго типизированного набора данных с минимальной схемой с XmlDataDocument.

Выполнение запроса XPath в наборе данных Демонстрирует выполнение запроса XPath на содержимое набора данных.

Применение преобразования XSLT к набору данных Демонстрирует применение преобразования XSLT к содержимому набора данных.

Использование XML в наборе данных Описывает, как DataSet взаимодействует с XML в качестве источника данных, включая загрузку и сохранение содержимого DataSet в виде XML-данных.

Вложенные данные Описывает важность вложенных DataRelation объектов при представлении содержимого DataSet данных XML и описывает, как создать эти отношения.

DataSets, DataTables и DataViews Описывает DataSet и как использовать их для управления данными приложений и взаимодействия с источниками данных, включая реляционные базы данных и XML.

XmlDataDocument Содержит справочные сведения о XmlDataDocument классе.

См. также