Sincronização de DataSet e XmlDataDocument

O ADO.NET DataSet fornece uma representação de dados relacional. Para obter acesso a dados hierárquicos, você pode usar as classes XML disponíveis no .NET Framework. Historicamente, essas duas representações de dados foram usadas separadamente. No entanto, o .NET Framework permite acesso síncrono em tempo real às representações de dados relacionais e hierárquicas por meio do objeto DataSet e XmlDataDocument, respectivamente.

Quando um DataSet é sincronizado com um XmlDataDocument, ambos os objetos estão trabalhando com um único conjunto de dados. Isso significa que, se uma alteração for feita ao DataSet, ela será refletida no XmlDataDocument e vice-versa. A relação entre o DataSet e o XmlDataDocument cria grande flexibilidade permitindo um único aplicativo, usando um único conjunto de dados, para acessar o pacote inteiro de serviços criados em torno do DataSet (como os controles Web Forms e Windows Forms, e os designers do Visual Studio .NET), bem como o conjunto de serviços XML que incluem a linguagem XSL, as transformações XSLT e a linguagem XPath. Você não tem que escolher qual conjunto de serviços direcionar com o aplicativo; ambos estão disponíveis.

Há várias maneiras de sincronizar um DataSet com um XmlDataDocument. Você pode:

  • Preencher um DataSet com esquema (ou seja, uma estrutura relacional) e dados e sincronizá-lo em com um novo XmlDataDocument. Isso fornece uma exibição hierárquica de dados relacionais existentes. Por exemplo:

    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);  
    
  • Preencher um DataSet com apenas esquema (como um DataSet fortemente tipado), sincronizá-lo com um XmlDataDocument e carregar o XmlDataDocument de um documento XML. Isso fornece uma exibição relacional de dados hierárquicos existentes. Os nomes das tabelas e das colunas em seu esquema de DataSet devem corresponder aos nomes de elementos XML com os quais você deseja sincronizá-los. Essa correspondência diferencia maiúsculas de minúsculas.

    Observe que o esquema do DataSet somente precisa corresponder os elementos XML que você deseja expor na sua exibição relacional. Dessa maneira, você pode ter um documento XML muito grande e uma "janela" relacional muito pequena nesse documento. O XmlDataDocument preserva o documento XML inteiro mesmo que o DataSet somente exponha apenas uma pequena parte dele. (Para obter um exemplo detalhado disso, consulte Sincronizar um Conjunto de Dados com um XmlDataDocument.)

    O exemplo de código a seguir mostra as etapas para criar um DataSet e preencher seu esquema e, em seguida, sincronizá-lo com um XmlDataDocument. Observe que o esquema do DataSet somente precisa corresponder os elementos do XmlDataDocument que você quer expor usando o 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");  
    

    Você não pode carregar o XmlDataDocument se ele estiver sincronizado com um DataSet que contém dados. Uma exceção será gerada.

  • Crie um novo XmlDataDocument, carregue-o de um documento XML e, em seguida, acesse a exibição de dados relacional usando a propriedade DataSet do XmlDataDocument. Você precisa definir o esquema do DataSet antes que poder exibir os dados no XmlDataDocument usando o DataSet. Novamente, os nomes das tabelas e das colunas em seu esquema de DataSet devem corresponder aos nomes de elementos XML com os quais você deseja sincronizá-los. Essa correspondência diferencia maiúsculas de minúsculas.

    O exemplo de código a seguir mostra como acessar a exibição de dados relacional em um 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");  
    

Outra vantagem de sincronizar um XmlDataDocument com um DataSet é que a fidelidade de um documento XML é preservada. Se o DataSet for preenchido de um documento XML usando ReadXml, quando os dados forem escritos novamente como um documento XML usando WriteXml, eles poderão diferir bastante do documento XML original. Isso ocorre porque o DataSet não mantém a formatação, como o espaço em branco, ou informações hierárquicas, como a ordem de elemento, do documento XML. O DataSet também não contém elementos do documento XML que foram ignorados porque não correspondem ao esquema do DataSet. Sincronizar um XmlDataDocument com um DataSet permite a formatação e a estrutura hierárquica do elemento do documento XML original para serem mantidas no XmlDataDocument, enquanto que o DataSet contém somente os dados e as informações de esquema apropriadas para o DataSet.

Ao sincronizar um DataSet com um XmlDataDocument, os resultados poderão diferir dependendo se os objetos DataRelation estão aninhados ou não. Para obter mais informações, consulte Nesting DataRelations.

Nesta seção

Sincronizar um DataSet com um XmlDataDocument
Demonstra a sincronização de um DataSet fortemente tipado, com esquema mínimo, com um XmlDataDocument.

Executar uma consulta XPath em um DataSet
Demonstra a execução de uma consulta XPath no conteúdo de um DataSet.

Aplicar uma transformação XSLT a um DataSet
Demonstra a aplicação de uma transformação XSLT ao conteúdo de um DataSet.

Usando XML em um DataSet
Descreve como o DataSet interage com XML como uma fonte de dados, incluindo o carregamento e a persistência do conteúdo de um DataSet como dados XML.

Aninhamento de DataRelations
Descreve a importância de objetos DataRelation aninhados ao representar o conteúdo de um DataSet como dados XML e descreve como criar estas relações.

DataSets, DataTables e DataViews
Descreve o DataSet e como usá-lo para gerenciar dados de aplicativo e interagir com as fontes de dados incluindo bancos de dados relacionais e XML.

XmlDataDocument
Contém informações de referência sobre a classe XmlDataDocument.

Confira também