Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O esquema de um DataSet (suas tabelas, colunas, relações e restrições) pode ser definido programaticamente, criado pelos métodos Fill ou FillSchema de um DataAdapter, ou carregado de um documento XML. Para carregar DataSet informações de esquema de um documento XML, você pode usar ou o método ReadXmlSchema ou o método InferXmlSchema do DataSet.
ReadXmlSchema permite carregar ou inferir DataSet informações de esquema do documento que contém o esquema XSD (linguagem de definição de esquema XML) ou um documento XML com esquema XML embutido.
InferXmlSchema permite inferir o esquema do documento XML ignorando determinados namespaces XML especificados.
Observação
A ordenação de tabela em um DataSet pode não ser preservada quando você usa serviços Web ou serialização XML para transferir um DataSet que foi criado na memória usando constructos XSD (como relações aninhadas). Portanto, o destinatário do DataSet não deve depender da ordenação da tabela nesse caso. No entanto, a ordenação de tabela sempre será preservada se o esquema do DataSet que está sendo transferido tiver sido lido dos arquivos XSD, em vez de ser criado na memória.
ReadXmlSchema
Para carregar o esquema de um DataSet documento XML sem carregar dados, você pode usar o ReadXmlSchema método do DataSet.
ReadXmlSchema cria o esquema DataSet definido usando a linguagem de definição de esquema XML (XSD).
O método ReadXmlSchema aceita um único argumento, que pode ser um nome de arquivo, um fluxo ou um XmlReader que contém o documento XML a ser carregado. O documento XML pode conter apenas o esquema ou pode conter esquema embutido com elementos XML que contêm dados. Para obter detalhes sobre como escrever esquema embutido como o esquema XML, consulte Derivar a estrutura relacional do DataSet do esquema XML (XSD).
Se o documento XML passado para ReadXmlSchema não contiver informações de esquema embutidas, ReadXmlSchema inferirá o esquema dos elementos no documento XML. Se o DataSet já contiver um esquema, o esquema atual será estendido com a adição de novas tabelas caso essas ainda não existam. Novas colunas não serão adicionadas às tabelas existentes. Se uma coluna que está sendo adicionada já existir no DataSet tipo mas tiver um tipo incompatível com a coluna encontrada no XML, uma exceção será gerada. Para obter detalhes sobre como ReadXmlSchema infere um esquema de um documento XML, consulte Inferring DataSet Relational Structure from XML.
Embora o ReadXmlSchema carregue ou infira apenas o esquema de um DataSet, o método ReadXml do DataSet carrega ou infere tanto o esquema quanto os dados contidos no documento XML. Para obter mais informações, consulte Carregando um Conjunto de Dados de XML.
Os exemplos de código a seguir mostram como carregar um DataSet esquema de um documento XML ou fluxo. O primeiro exemplo mostra um nome de arquivo de esquema XML sendo 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
Você também pode instruir a DataSet inferir seu esquema de um documento XML usando o InferXmlSchema método do DataSet.
InferXmlSchema funciona da mesma forma que tanto ReadXml quanto um XmlReadModeInferSchema (carrega dados, bem como infere o esquema) e ReadXmlSchema se o documento que está sendo lido não contém nenhum esquema embutido. No entanto, InferXmlSchema fornece a capacidade adicional de permitir que você especifique namespaces XML específicos a serem ignorados quando o esquema for inferido.
InferXmlSchema usa dois argumentos necessários: o local do documento XML, especificado por um nome de arquivo, um fluxo ou um XmlReader; e uma matriz de cadeia de caracteres 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 no documento XML anterior, tanto o ReadXmlSchema método quanto o ReadXml método com um XmlReadMode de InferSchema criariam tabelas para cada elemento no documento: Categories, CategoryID, CategoryName, Description, Products, ProductID, ReorderLevel e Discontinued. (Para obter mais informações, consulte Inferring DataSet Relational Structure from XML.) No entanto, uma estrutura mais apropriada seria criar apenas as Categories tabelas e Products , em seguida, criar CategoryID, CategoryName e Description colunas na Categories tabela e ProductID, ReorderLevel e Discontinued colunas na Products tabela. Para garantir que o esquema inferido ignore os atributos especificados nos elementos XML, use o método InferXmlSchema e especifique o namespace XML a ser ignorado officedata, conforme mostrado no exemplo a seguir.
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");