Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O esquema de um DataSet (as suas tabelas, colunas, relações e restrições) pode ser definido programaticamente, criado pelos métodos Fill ou FillSchema de um DataAdapter, ou carregado a partir de um documento XML. Para carregar DataSet informação de esquema a partir de um documento XML, pode usar tanto o ReadXmlSchema ou o InferXmlSchema método do DataSet.
ReadXmlSchema permite-lhe carregar ou inferir DataSet informação de esquema a partir de um documento que contenha um esquema XSD ou de um documento XML com esquema XML inline.
InferXmlSchema permite inferir o esquema a partir do documento XML ignorando certos namespaces XML que especifica.
Observação
A ordenação de tabelas pode não ser preservada DataSet quando se utilizam serviços Web ou serialização XML para transferir uma DataSet que foi criada na memória com construtos XSD (como relações aninhadas). Portanto, o destinatário do DataSet não deve depender da ordenação das tabelas neste caso. No entanto, a ordenação das tabelas é sempre preservada se o esquema do DataSet sendo transferido foi lido a partir de ficheiros XSD, em vez de ser criado em memória temporária.
ReadXmlSchema
Para carregar o esquema de a DataSet a partir de um documento XML sem carregar quaisquer dados, pode usar o ReadXmlSchema método do DataSet.
ReadXmlSchema cria DataSet um esquema definido usando o esquema XML Schema Definition Language (XSD).
O ReadXmlSchema método requer um único argumento de um nome de ficheiro, um fluxo ou um XmlReader que contenha o documento XML a ser carregado. O documento XML pode conter apenas esquema ou pode conter esquema alinhado com elementos XML contendo dados. Para obter detalhes sobre como escrever esquema embutido como esquema XML, consulte Derivando a estrutura relacional do conjunto de dados do esquema XML (XSD).
Se o documento XML passado para ReadXmlSchema não contiver informação de esquema em linha, ReadXmlSchema irá inferir o esquema a partir dos elementos do documento XML. Se já DataSet contiver um esquema, o esquema atual será estendido adicionando novas tabelas, caso ainda não existam. Novas colunas não serão adicionadas às tabelas existentes. Se uma coluna a ser adicionada já existir no DataSet mas tiver um tipo incompatível com a coluna encontrada no XML, é lançada uma exceção. Para detalhes sobre como ReadXmlSchema infere um esquema a partir de um documento XML, veja Inferindo Estrutura Relacional de DataSet a partir de XML.
Embora ReadXmlSchema carregue ou infira apenas o esquema de um DataSet, o ReadXml método carrega DataSet ou infere tanto o esquema como os dados contidos no documento XML. Para obter mais informações, consulte Carregando um DataSet a partir de XML.
Os seguintes exemplos de código mostram como carregar um DataSet esquema a partir de um documento ou fluxo XML. O primeiro exemplo mostra um nome de ficheiro XML Schema a ser passado para o ReadXmlSchema método. O segundo exemplo mostra um System.IO.StreamReader.
Dim dataSet As DataSet = New DataSet
dataSet.ReadXmlSchema("schema.xsd")
DataSet dataSet = new DataSet();
dataSet.ReadXmlSchema("schema.xsd");
Dim xmlStream As New System.IO.StreamReader("schema.xsd")
Dim dataSet As DataSet = New DataSet
dataSet.ReadXmlSchema(xmlStream)
xmlStream.Close()
System.IO.StreamReader xmlStream = new System.IO.StreamReader("schema.xsd");
DataSet dataSet = new DataSet();
dataSet.ReadXmlSchema(xmlStream);
xmlStream.Close();
InferXmlSchema
Também pode instruir o DataSet a inferir o seu esquema a partir de um documento XML usando o InferXmlSchema método do DataSet.
InferXmlSchema funciona tanto quanto ReadXml com um XmlReadMode de InferSchema (carregando dados e inferindo o esquema), e também ReadXmlSchema caso o documento lido não contenha um esquema inline. No entanto, InferXmlSchema oferece a capacidade adicional de permitir especificar determinados namespaces XML a serem ignorados quando o esquema é inferido.
InferXmlSchema reúne dois argumentos obrigatórios: a localização do documento XML, especificada por um nome de ficheiro, um fluxo ou um XmlReader; e um array de cadeias de namespaces XML a serem ignorados pela operação.
Por exemplo, considere o seguinte XML:
<NewDataSet xmlns:od="urn:schemas-microsoft-com:officedata">
<Categories>
<CategoryID od:adotype="3">1</CategoryID>
<CategoryName od:maxLength="15" od:adotype="130">Beverages</CategoryName>
<Description od:adotype="203">Soft drinks and teas</Description>
</Categories>
<Products>
<ProductID od:adotype="20">1</ProductID>
<ReorderLevel od:adotype="3">10</ReorderLevel>
<Discontinued od:adotype="11">0</Discontinued>
</Products>
</NewDataSet>
Devido aos atributos especificados para os elementos do documento XML anterior, tanto o ReadXmlSchema método como o ReadXml método com um XmlReadMode de InferSchema criariam tabelas para cada elemento do documento: Categories, CategoryID, CategoryName, Description, Products, ProductID, ReorderLevel e Discontinued. (Para mais informações, veja Inferir Estrutura Relacional DataSet a partir de XML.) No entanto, uma estrutura mais apropriada seria criar apenas a Categories e a Products tabela, e depois de criar as colunas CategoryID, CategoryName, e Description na tabela Categories, e as colunas ProductID, ReorderLevel, e Discontinued na tabela Products. Para garantir que o esquema inferido ignora os atributos especificados nos elementos XML, use o InferXmlSchema método e especifique o namespace XML para officedata a ser ignorado, como mostrado no exemplo seguinte.
Dim dataSet As DataSet = New DataSet
dataSet.InferXmlSchema("input_od.xml", New String() {"urn:schemas-microsoft-com:officedata"})
DataSet dataSet = new DataSet();
dataSet.InferXmlSchema("input_od.xml", new string[] "urn:schemas-microsoft-com:officedata");