Partilhar via


Gerando conjuntos de dados fortemente tipados

Dado um esquema XML que está em conformidade com o padrão XSD (XML Schema Definition Language), você pode gerar um fortemente tipado DataSet usando a ferramenta XSD.exe fornecida com o Windows Software Development Kit (SDK).

(Para criar um xsd a partir de tabelas de banco de dados, consulte WriteXmlSchema ou Trabalhando com conjuntos de dados no Visual Studio).

O código seguinte mostra a sintaxe para gerar um DataSet usando esta ferramenta.

xsd.exe /d /l:CS XSDSchemaFileName.xsd /eld /n:XSDSchema.Namespace

Nessa sintaxe, a /d diretiva informa a ferramenta para gerar um DataSet e a /l: informa à ferramenta qual linguagem usar (por exemplo, C# ou Visual Basic .NET). A diretiva opcional /eld especifica que você pode usar LINQ to DataSet para consultar o DataSet gerado. Esta opção é usada quando a /d opção também é especificada. Para obter mais informações, consulte Consultando conjuntos de dados tipados. A diretiva opcional /n: indica à ferramenta para também gerar um namespace para o DataSet chamado XSDSchema.Namespace. A saída do comando é XSDSchemaFileName.cs, que pode ser compilada e usada em um aplicativo ADO.NET. O código gerado pode ser compilado como uma biblioteca ou um módulo.

O código a seguir mostra a sintaxe para compilar o código gerado como uma biblioteca usando o compilador C# (csc.exe).

csc.exe /t:library XSDSchemaFileName.cs /r:System.dll /r:System.Data.dll

A /t: diretiva diz à ferramenta para fazer a compilação para uma biblioteca, e as /r: diretivas especificam as bibliotecas dependentes necessárias para a compilação. A saída do comando é XSDSchemaFileName.dll, que pode ser passada para o compilador ao compilar um aplicativo ADO.NET com a /r: diretiva.

O código a seguir mostra a sintaxe para acessar o namespace passado para XSD.exe em um aplicativo ADO.NET.

Imports XSDSchema.Namespace
using XSDSchema.Namespace;

O exemplo de código seguinte utiliza um DataSet tipado chamado CustomerDataSet para carregar uma lista de clientes da base de dados Northwind. Uma vez que os dados são carregados usando o Fill método, o exemplo percorre cada cliente na Customers tabela usando o objeto tipado CustomersRow (DataRow). Isto proporciona acesso direto à coluna CustomerID, ao contrário do DataColumnCollection.

Dim customers As CustomerDataSet= New CustomerDataSet()
Dim adapter As SqlDataAdapter New SqlDataAdapter( _
  "SELECT * FROM dbo.Customers;", _
  "Data Source=(local);Integrated " & _
  "Security=SSPI;Initial Catalog=Northwind")

adapter.Fill(customers, "Customers")

Dim customerRow As CustomerDataSet.CustomersRow
For Each customerRow In customers.Customers
  Console.WriteLine(customerRow.CustomerID)
Next
CustomerDataSet customers = new CustomerDataSet();
SqlDataAdapter adapter = new SqlDataAdapter(
  "SELECT * FROM dbo.Customers;",
  "Data Source=(local);Integrated " +
  "Security=SSPI;Initial Catalog=Northwind");

adapter.Fill(customers, "Customers");

foreach(CustomerDataSet.CustomersRow customerRow in customers.Customers)
  Console.WriteLine(customerRow.CustomerID);

A seguir está o esquema XML usado para o exemplo:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="CustomerDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="CustomerDataSet" msdata:IsDataSet="true">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element name="Customers">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="CustomerID" type="xs:string" minOccurs="0" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>

Ver também