Sincronização de DataSet e XmlDataDocument
O ADO.NET DataSet fornece uma representação relacional de dados. Para acesso a dados hierárquicos, você pode usar as classes XML disponíveis no .NET Framework. Historicamente, estas duas representações de dados têm sido usadas separadamente. No entanto, o .NET Framework permite acesso síncrono em tempo real às representações relacionais e hierárquicas de dados por meio do objeto DataSet e do XmlDataDocument objeto, 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 no DataSet, a alteração será refletida no XmlDataDocument e vice-versa. A relação entre o DataSet e o XmlDataDocument cria grande flexibilidade permitindo que um único aplicativo, usando um único conjunto de dados, acesse todo o conjunto de serviços criados em torno do DataSet (como Web Forms e controles Windows Forms e designers do Visual Studio .NET), bem como o conjunto de serviços XML, incluindo XSL (Extensible Stylesheet Language), Transformações XSL (XSLT) e XML Path Language (XPath). Você não precisa escolher qual conjunto de serviços segmentar com o aplicativo; ambos estão disponíveis.
Há várias maneiras de sincronizar um DataSet com um XmlDataDocument. Pode:
Preencha um DataSet com esquema (ou seja, uma estrutura relacional) e dados e, em seguida, sincronize-o com um novo XmlDataDocument. Isso fornece uma visão hierárquica dos 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);
Preencha um DataSet apenas com esquema (como um DataSet fortemente tipado), sincronize-o com um XmlDataDocument e, em seguida, carregue o XmlDataDocument de um documento XML. Isso fornece uma visão relacional dos dados hierárquicos existentes. Os nomes de tabela e os nomes de coluna em seu esquema DataSet devem corresponder aos nomes dos elementos XML com os quais você deseja sincronizá-los. Essa correspondência diferencia maiúsculas de minúsculas.
Observe que o esquema do DataSet só precisa corresponder aos elementos XML que você deseja expor em sua exibição relacional. Dessa forma, você pode ter um documento XML muito grande e uma "janela" relacional muito pequena nesse documento. O XmlDataDocument preserva todo o documento XML, mesmo que o DataSet exponha apenas uma pequena parte dele. (Para um exemplo detalhado disso, consulte Sincronizando um DataSet 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 DataSet só precisa corresponder aos elementos do XmlDataDocument que você deseja 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");
Não é possível carregar um XmlDataDocument se ele estiver sincronizado com um DataSet que contém dados. Uma exceção será lançada.
Crie um novo XmlDataDocument e carregue-o de um documento XML e, em seguida, acesse a exibição relacional dos dados usando a propriedade DataSet do XmlDataDocument. Você precisa definir o esquema do DataSet antes de poder exibir qualquer um dos dados no XmlDataDocument usando o DataSet. Novamente, os nomes de tabela e de coluna em seu esquema DataSet devem corresponder aos nomes dos 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 relacional dos dados 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 a partir de um documento XML usando ReadXml, quando os dados forem gravados novamente como um documento XML usando WriteXml , ele poderá diferir drasticamente do documento XML original. Isso ocorre porque o DataSet não mantém a formatação, como espaço em branco, ou informações hierárquicas, como a ordem dos elementos, do documento XML. O DataSet também não contém elementos do documento XML que foram ignorados porque eles não corresponderam ao esquema do Dataset. A sincronização de um XmlDataDocument com um DataSet permite que a formatação e a estrutura de elementos hierárquicos do documento XML original sejam mantidas no XmlDataDocument, enquanto o DataSet contém apenas dados e informações de esquema apropriadas para o DataSet.
Ao sincronizar um DataSet com um XmlDataDocument, os resultados podem diferir dependendo se seus DataRelation objetos estão aninhados ou não. Para obter mais informações, consulte Aninhando DataRelations.
Nesta Secção
Sincronizando um DataSet com um XmlDataDocument
Demonstra a sincronização de um DataSet fortemente tipado, com esquema mínimo, com um XmlDataDocument.
Executando uma consulta XPath em um DataSet
Demonstra a execução de uma consulta XPath no conteúdo de um DataSet.
Aplicando uma transformação XSLT a um DataSet
Demonstra a aplicação de uma transformação XSLT ao conteúdo de um DataSet.
Secções Relacionadas
Usando XML em um DataSet
Descreve como o DataSet interage com XML como uma fonte de dados, incluindo carregar e persistir o conteúdo de um DataSet como dados XML.
Aninhando DataRelations
Discute a importância de objetos DataRelation aninhados ao representar o conteúdo de um DataSet como dados XML e descreve como criar essas relações.
DataSets, DataTables e DataViews
Descreve o DataSet e como usá-lo para gerenciar dados de aplicativos e interagir com fontes de dados, incluindo bancos de dados relacionais e XML.
XmlDataDocument
Contém informações de referência sobre a classe XmlDataDocument .