VB.NET - Mapeando tabelas da fonte
de dados para o DataSet
A estrutura de tabelas em um DataSet nem sempre coincide com a estrutura das tabelas na fonte de dados. Algumas razões para isto podem ser :
O dataset foi criado a partir de um esquema existente que usa nomes diferentes daqueles na fonte de dados
Você pode querer alterar os nomes dos elementos de dados por questão de conveniência , legibilidade ou por uma questão de tradução para outro idioma.
Você pode querer controlar os nomes dos membros de dados tipados quando você gerar o dataset de um adapter.
A fim de coincidir tabelas e colunas na fonte de dados com aquelas no dataset você pode definir a propriedade TableMappings de um data adapter. Esta propriedade contém informação que estabelece uma correspondência entre as colunas das tabelas da fonte de dados e as colunas das tabelas do datset. Quando o data adapter lê dados de uma fonte de dados , a propriedade TableMappings é usada para determinar onde escrever no DataSet os dados.
A seguir vou mostrar como você pode definir o mapeamento das tabelas no data adapter. Vamos supor que você esta trabalhando com um esquema de dados que recebeu ; você terá que mapear as colunas de uma tabela no seu banco de dados (no nosso caso a tabela costumers do banco de dados northwind.mdb) para as colunas definidas no esquema de dados.
- Inicie um novo projeto no Visual Studio.NET com as seguintes características (sinta-se a vontade para alterar a seu gosto.)
O esquema com o qual você vai ter que é o seguinte :(Perceba que a estrutura definida para o esquema é diferente da estrutura da tabela Customers)
<?xml version="1.0" encoding="utf-8" ?> <xs:schema id="dsCustomers" targetNamespace="http://www.tempuri.org/dsCustomers.xsd" _ xmlns="http://www.tempuri.org/dsCustomers.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" _ xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" elementFormDefault="qualified"> <xs:element name="dsCustomers" msdata:IsDataSet="true"> <xs:complexType> <xs:choice maxOccurs="unbounded"> <xs:element name="Customers"> <xs:complexType> <xs:sequence> <xs:element name="CustID" type="xs:string" /> <xs:element name="CompName" type="xs:string" /> <xs:element name="ContName" type="xs:string" minOccurs="0" /> <xs:element name="ContTitle" type="xs:string" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> <xs:key name="Constraint1" msdata:PrimaryKey="true"> <xs:selector xpath=".//Customers" /> <xs:field xpath="CustID" /> </xs:key> </xs:element> </xs:schema> |
A primeira coisa a fazer é incluir o esquema acima no seu projeto.
Clique com o botão direito do mouse sobre o nome do seu projeto e no menu suspenso selecione a opção Add e a seguir Add a New Item
Na janela Add new Item no painel templates selecione - DataSet - e altere o nome para : dsCostumers
O descritor XML irá abrir um esquema DataSet vazio. Clique na aba XML e copie e cole o esquema fornecido sobreponde completamente o padrão informado.
Salve o esquema e feche-o em seguida.
Verifique que você tem um arquivo de classe dataset baseado no esquema. No Solutions explorer clique em Show All files e então expanda o nó para o novo esquema. Você verá um arquivo class com extensão .vb)
Vamos a segunda etapa do nosso projeto: Incluir uma instância de um DataSet no seu projeto
A partir da janela de ferramentas , na guia Data , inclua um componente DataSet no seu projeto
Na janela Add DataSet selecione - Typed DataSet - e o nome dsCustomers (o nome do projeto Maptabelas é o prefixo do nome)
Uma instância de um dataset será incluida no seu formulário com o nome de dsCustomers1
Com o dataset definido você pode configurar o data adapter que irá ler os dados do banco de dados e preencherá o dataset. O data adapter conterá o mapeamento das tabelas que fará coincidir o nome das colunas do banco de dados com o dataset.]
Agora vamos testar o projeto.
Inclua um componente DataGrid no formulário
Selecione o DataGrid e abra a janela de propriedades
Defina a seguir as seguintes propriedades:
DataSource = dsCustumers1
DataMember = Customers
Para poder rodar temos que preencher o DataSet e vamos fazer isto incluindo o código abaixo no evento Load do formulário :
Private
Sub Form1_Load(ByVal
sender As System.Object,
ByVal e
As System.EventArgs)
Handles
MyBase.Load OleDbDataAdapter1.Fill(DsCustomers1) End Sub |
Pressione F5 para rodar o formulário. Quando o formulário for exibido os dados da tabela Customers do banco de dados Northwind.mdb serão exibidos usando as colunas mapeadas.
Até o
próximo artigo...
José Carlos Macoratti