Синхронизация набора данных и XmlDataDocument

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

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

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

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

См. также