VB.NET - Criando o seu Data Adapter via Código


O VS.NET é uma ferramenta fantástica que pode facilitar muito a vida do programador. O assistente de gerador de código pode ajudar-lhe a criar aplicações para banco de dados de uma forma rápida e segura. Mas se você pretende criar uma aplicação mais complexa e robusta você vai sentir a necessidade de ter um controle maior sobre o que esta acontecendo nos bastidores ; para isto você mesmo vai ter que criar o código usando os seus conhecimentos.

Quando você trabalha com banco de dados usando objetos DataSet vai precisar trabalhar também com objetos Data Adapters pois neles residem os comandos para tratamento de registros. Neste caso você vai ter que criar seu próprio Data Adapter via código.

Você quer motivos para encorajá-lo a criar o seu próprio Data Adapter via código ? pois bem , segue uma pequena relação:

Ficou convencido agora ?

Examinando a estrutura básica de um Data Adapter

Os objetos DataAdapter fazem ligação entre um objeto DataSet e um banco de dados e são responsáveis por preencher o DataSet com as informações da fonte de dados e em seguida atualizar novamente a fonte de dados com as informações do DataSet.

As propriedades/métodos principais do objeto DataAdapter são :

- SelectCommand - declaração SQL (SELECT) usada pelo Data Adapter para selecionar registros na fonte de dados

- InsertCommand - declaração SQL (INSERT) usada pelo DataAdapter para incluir registros no banco de dados.

- DeleteCommand - declaração SQL (DELETE) usada pelo DataAdapter para excluir registros no banco de dados.

- TableMappings - Coleção que faz o mapeamento entre as tabelas originais do banco de dados e os objetos DataTable do DataSet. O DataAdapter utiliza este mapeamento quando precisa reconciliar o banco de dados com os dados alterados no DataSet; ele usa então as informações de TableMappings para associar os nomes das colunas do banco de dados com os nomes das colunas no DataSet.

- Fill - preenche o DataSet associado ao DataAdapter com os dados do banco de dados.

- Update - atualiza o banco de dados com as alterações feitas no DataSet.

- FillSchema - Carrega uma estrutura ou 'esquema' dos dados do banco de dados para um tabela chamada Table na coleção Tables do objeto DataSet.

As propriedades SelectCommand, UpdateCommand, InsertCommand é que vão realmente afetar os dados da fonte de dados , todas elas aceitam um objeto OleDbCommand como parâmetro. O objeto OleDbCommand modela uma operação SQL que pode ser realizada contra um banco de dados. Vejamos um exemplo básico :

1 : OleDbCommand comando = new OleDbCommand("UPDATE Property SET Nome=? WHERE Codigo=?", dbConexao);

2 : comando.Parameters.Add(new System.Data.OleDb.OleDbParameter("Nome", System.Data.OleDb.OleDbType.Char, 50);

3 : comando.Parameters.Add(new System.Data.OleDb.OleDbParameter("Codigo", System.Data.OleDb.OleDbType.Numeric, 0);

Na linha 1 temos a definição de um objeto comando como do tipo OleDbCommand . A instrução SQL utiliza o coringa '?' e forma que os valores são passados de forma dinâmica em tempo de execução da instrução.

As linhas 2 e 3 definem o tipo de dados que os parâmetros poderão receber e que irão substituir os coringas '?' na instrução SQL. Isto é feito incluindo um novo OleDbParameter a coleção Parameters do objeto OleDbCommand. Os parâmetros definidos são:

Nome - definido como sendo do tipo char através da enumeração OleDbType com tamanho de 50 caracteres
Codigo - definido como sendo do tipo Numeric com tamanho zero.

Nota: Existem outros construtores que incluem mais informação que a mostrada neste exemplo.

Como usar o comando definido acima ? Boa pergunta , garoto.

Abaixo o exemplo onde passamos os valores para os parâmetros definidos conforme acima :

1 : comando.Parameters["Nome"]="Jose Carlos Macoratti";
2 : comando.Parameters["Codigo"]=10;
3 : comando.ExecuteNonQuery();


Note que atribuímos os valores a parâmetro Nome e Codigo e em seguida executamos o comando .

Vamos então usando o conceito aqui exposto criar o nosso DataAdapter usando um OleDbCommand. Como exemplo estaremos usando a tabela Alunos que tem a seguinte estrutura :

O código é o seguinte :

OleDbDataAdapter da = new OleDbDataAdapter("SELECT Codigo, Nome FROM Alunos", conexaoDB);

OleDbCommand icomando = new OleDbCommand("INSERT INTO Alunos (Nome) VALUES (?)", conexaoDB);
icomando.Parameters.Add(new OleDbParameter("Nome", OleDbType.Char, 50));
da.InsertCommand=icomando;

OleDbCommand ucomando = new OleDbCommand("UPDATE Alunos SET Nome=? WHERE Codigo=?", conexaoDB);
ucomando.Parameters.Add(new OleDbParameter("Nome", OleDbType.Char, 50));
ucomando.Parameters.Add(new OleDbParameter("Codigo", OleDbType.Numeric, 0));
da.UpdateCommand=ucomando;

OleDbCommand dcomando = new OleDbCommand("DELETE FROM Alunos WHERE Codigo=?", conexaoDB);
dcomando.Parameters.Add(new OleDbParameter("Codigo", OleDbType.Numeric, 0));
da.DeleteCommand=dcomando;

No código acima definimos 4 comandos : consulta , inclusão , atualização e exclusão :

- OleDbDataAdapter da = new OleDbDataAdapter("SELECT Codigo, Nome FROM Alunos", conexaoDB);

- icomando = new OleDbCommand("INSERT INTO Alunos (Nome) VALUES (?)", conexaoDB);

- ucomando = new OleDbCommand("UPDATE Alunos SET Nome=? WHERE Codigo=?", conexaoDB);

- dcomando = new OleDbCommand("DELETE FROM Alunos WHERE Codigo=?", conexaoDB);

A instrução SQL SELECT foi colocada no construtor do nosso DataAdapter , fazer isto é a mesma coisa que declarar um OleDbCommand e colocar a instrução SQL dentro dele e a seguir atribuí-la ao da.SelectCommand como fizemos com os demais comandos.

Você acabou de criar o seu próprio DataAdapter via código . Na sequência deste artigo pretendo mostrar como usá-lo para atualizar os dados do banco de dados e do DataSet.

Eu sei é apenas VB.NET mas eu gosto...


José Carlos Macoratti