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


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

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

При синхронизации набора данных с XmlDataDocument оба объекта работают с одним набором данных. Это означает, что если в набор данных внесены изменения, это изменение будет отражено в XmlDataDocument и наоборот. Связь между Набором данных и XmlDataDocument обеспечивает большую гибкость, позволяя одному приложению, используя один набор данных, получить доступ ко всему набору служб, созданных вокруг набора данных (например, элементов управления Web Forms и Windows Forms, и конструкторов .NET Visual Studio), а также набора XML-служб, включая расширяемый язык таблицы стилей (XSL), Преобразования XSL (XSLT) и язык XML-пути (XPath). Вам не обязательно выбирать, для какого набора сервисов использовать приложение; оба доступны.

Существует несколько способов синхронизации набора данных с XmlDataDocument. Вы можете:

  • Заполните набор данных схемой (то есть реляционной структурой) и данными, а затем синхронизируйте их с новым 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);  
    
  • Заполните набор данных только схемой (например, строго типизированный набор данных), синхронизируйте его с XmlDataDocument, а затем загрузите XmlDataDocument из XML-документа. Это обеспечивает реляционное представление существующих иерархических данных. Имена таблиц и имена столбцов в схеме DataSet должны соответствовать именам XML-элементов, с которыми они синхронизируются. Это сопоставление учитывает регистр.

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

    В следующем примере кода показаны шаги по созданию набора данных и заполнению схемы, а затем синхронизации его с xmlDataDocument. Обратите внимание, что схема Набора данных должна соответствовать только элементам из 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 , если он синхронизирован с набором данных , содержащими данные. Исключение будет создано.

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

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

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

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

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

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

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

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

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

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

См. также