Gerando comandos de inserção, alteração e delete automaticamente

Hoje o Visual Studio possui um wizard para que possamos conectar ao Banco de Dados, selecionar qual objeto do Banco vamos utilizar, e já criar um form para este objeto, gerando sozinho todos os comandos de Insert, Update e Delete para o TableAdapter.

Hoje o Visual Studio possui um wizard para que possamos conectar ao Banco de Dados, selecionar qual objeto do Banco vamos utilizar, e já criar um form para este objeto, gerando sozinho todos os comandos de Insert, Update e Delete para o TableAdapter.

O problema é que, ao fazer isto nossa aplicação fica amarrada a aquele Banco de Dados, e toda modificação em nossa tabela, deveremos atualizar o DataSet Tipado que foi gerado, para que possa ser atualizado os comandos.

Como deixar nossa aplicação mais flexível para acesso a Banco de Dados distintos e não tendo a preocupação de toda vez que modificar a tabela seja necessário atualizar o DataSet Tipado?

Hoje podemos contar com o CommandBuilder. Esta classe possui em todos os providers de Banco de Dados para  Dot.net, no nosso exemplo vamos usar o do SQL Server.

Então teremos um classe estática onde será implementado a geração dos códigos, como pode ser visto na Listagem 1.

Listagem 1: Classe que será responsável para geração dos comandos.

using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; // Pois o nosso exemplo é para SQL Server namespace CommandBuilder {     public static class  AcessoDados     {     } }

Nesta classe teremos um método que receberá como parâmetro a consulta de select a ser executada. Estamos partindo do pressuposto que a aplicação já está conectada, nossa classe ficará como é mostrado na Listagem 2.

Listagem 2: Implementação do Método Gerar Comandos

public static class  AcessoDados     {         //Pressupomos que a parte de conexão com o Banco já está feita         static SqlConnection conexao = new SqlConnection();           public static SqlDataAdapter GerarComandos(string consulta)         {             SqlDataAdapter adapter = new SqlDataAdapter(consulta,conexao);             SqlCommandBuilder comand = new SqlCommandBuilder(adapter);             return adapter;         }     }

Este método receberá nossa consulta select da tabela que queremos carregar o comando (Ex: Select * from Produtos), instanciará um DataAdapter e através do deste irá gerar os comandos de Insert, Update, Delete de acordo com a Tabela passada e já setar os comandos no nosso DataAdapter, retornando o mesmo carregado com estas informações.

Para poder verificar os comandos que foram gerados, é necessário usar os métodos que podem ser visualizados na Listagem 3. 

Listagem 3: Comandos gerados através do CommandBuilder

comand.GetDeleteCommand(); /*DELETE FROM [PRODUTO] WHERE (([CODIGO] = @p1) AND ((@p2 = 1 AND [DESCRICAO] IS NULL) OR ([DESCRICAO] = @p3)) AND ((@p4 = 1 AND [DATA] IS NULL) OR ([DATA] = @p5)))*/ comand.GetInsertCommand(); //INSERT INTO [PRODUTO] ([DESCRICAO], [DATA]) VALUES (@p1, @p2) comand.GetUpdateCommand(); /*UPDATE [PRODUTO] SET [DESCRICAO] = @p1, [DATA] = @p2 WHERE (([CODIGO] = @p3) AND ((@p4 = 1 AND [DESCRICAO] IS NULL) OR ([DESCRICAO] = @p5)) AND ((@p6 = 1 AND [DATA] IS NULL) OR ([DATA] = @p7)))*/

Com nosso comandos gerados, a nossa gravação poderá ser usando o DataAdapter.Update(DataSet), pois com o método GerarComando nos DataApadater já´estará carregado com os comandos acima, justamente o que o Wizardo do Visual Studio iria fazer.

Conclusão

Com o CommandBuilder, conseguimos gerar os comandos de Inser,Delete e Update para a tabela que iremos trabalhar, permitidindo que façamos uma aplicação fexível ao banco de dados e alterações na estrutura do mesmo.

Lembrando que o CommandBuiderl não consegue gerar comandos caso haja join no comando de Select, ou seja, somente utilizar quando for gerar  os códigos para uma única tabela.

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados