ADO .NET - Camada de Acesso a dados Genérica 3 (revisitado)
Na segunda parte deste artigo preparamos o projeto Windows Forms para testar a nossa camada de acesso a dados, incluindo a referência ao nosso projeto DALGeneric e definindo as strings de conexão e o nome do provedor no arquivo de configuração App.Config e realizamos o teste com o banco de dados SQL Server. |
Vamos agora fazer o teste usando o banco de dados MySQL.
1- Testando para o MySql
Para testar o MySQL vou utilizar a versão 5.1 que tenho instalada em minha máquina. Para isso criei o banco de dados cadastro e a tabela contatos com a estrutura exibida na figura abaixo que foi obtida a partir do MySQL Administrator:
Eu criei também no banco de dados 5 stored procedures que são mostradas abaixo com o respectivo código:
CREATE DEFINER=`root`@`localhost` PROCEDURE `atualizaContato`(_id INT , _nome VARCHAR(45), _email VARCHAR(45), _sexo VARCHAR(45))
BEGIN
update contatos set nome=_nome, email = _email, seox = _sexo Where id = _id;
END
CREATE DEFINER=`root`@`localhost` PROCEDURE `deletaContato`(_id INT)
BEGIN
delete from contatos where id = _id;
END
CREATE DEFINER=`root`@`localhost` PROCEDURE `listaContatoPorId`(IN _id INT)
BEGIN
if ( _id IS NULL) THEN
Select * from contatos;
else
select * from contatos where id=_id ;
end if;
END
CREATE DEFINER=`root`@`localhost` PROCEDURE `listaContatos`()
BEGIN
Select * from contatos;
END
CREATE DEFINER=`root`@`localhost` PROCEDURE `salvaContato`( _nome VARCHAR(45), _email VARCHAR(45), _sexo VARCHAR(45))
BEGIN
insert into contatos (nome,email,sexo) values (_nome, _email, _sexo);
END
Abaixo vemos as stored procedures listadas no banco de dados usando o MysQL Administrator.
Nosso objetivo será acessar a tabela contatos realizando as operações básicas e usando as stored procedures.
Vamos ver se nossa camada de acesso a dados genérica é mesmo genérica e vai dar conta do recado.
Antes de iniciar os testes temos que definir mais um item em nossa solução.
Temos que incluir uma referência ao Connector/Net que é um driver ADO .NET para o MySQL em nosso projeto da camada de acesso a dados.
Clique com o botão direito sobre o projeto DALGeneric e selecione Add Reference;
Na janela Add Reference clique em Browse e localize o local onde você descompactou os arquivos do Connector/Net e selecione o arquivo MySQL.Data.dll, marque a opção e clique em Ok;
Agora o último ajuste...
Para que o a conexão com o MySQL seja aberta temos que alterar a classe ConexaoDB do projeto DALGeneric informando o nome da string de conexão como MySQLConnectionString :
Shared Sub
New() Try _connectionString = ConfigurationManager.ConnectionStrings("MySQLConnectionString").ConnectionString _providerName = ConfigurationManager.ConnectionStrings("MySQLConnectionString").ProviderName Catch ex As Exception Throw New Exception("Erro ao acessar a string de conexão") End Try End Sub |
Pronto agora sim podemos iniciar os testes !!!
Vamos incluir um novo formulário no projeto DALWinTeste. Selecione o projeto e a partir do menu PROJECT clique em Add Windows Forms;
A seguir aceite o nome padrão form2.vb e clique em Add.
Vamos definir neste arquivo form2.vb a nossa interface. Inclua a partir da ToolBox os controles baixo neste formulário:
Defina o seguinte leiaute no formulário:
Clique com o botão direito sobre o projeto e selecione Properties e defina no projeto o startup form como sendo o form2.vb.
1- Carregando dados no DataGridView usando a stored procedure 'listaContatos'
Quando o formulário for carregado vamos exibir os dados da tabela contatos no controle DataGridView.
Para isso no evento Load do formulário form2.vb defina o código abaixo:
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
carregaContatos()
End Sub
|
Agora crie a rotina carregaContatos() com o código a seguir:
Private Sub carregaContatos() Try Dim ds = New DataSet Dim cmd = "listaContatos" ds = DALGeneric.AcessoGenericoDB.ExecutarComando(cmd, CommandType.StoredProcedure, Nothing, DALGeneric.AcessoGenericoDB.TipoDeComando.ExecuteDataSet) dgvContatos.DataSource = ds.Tables(0) Catch ex As Exception MessageBox.Show("Erro : " & ex.Message, "Erro ao acessar o banco de dados", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub |
Criamos uma instância do objeto DataSet e definimos a instrução SQL como sendo a store procedure 'listaContatos';
A seguir usamos o método ExecutarComando da nossa camada de acesso a dados DALGeneric e atribuímos o resultado ao DataGridview:
Veja o resultado obtido:
2- Incluindo um novo contato na tabela contatos usando a stored procedure 'salvaContato'
Para incluir um novo contato vamos informar o valores nas caixas de texto (com exceção do código que será atribuído automaticamente pelo SGBD).
No evento Click do botão de comando Incluir defina o código abaixo:
Private Sub btnIncluir_Click(sender As Object, e As EventArgs) Handles btnIncluir.Click Dim nome As String = txtNome.Text Dim email As String = txtEmail.Text Dim sexo As String = txtSexo.Text Dim listaParametros As New List(Of DbParameter) listaParametros.Add(DALGeneric.GenericDB.CriarParametro("_nome", DbType.String, nome)) listaParametros.Add(DALGeneric.GenericDB.CriarParametro("_email", DbType.String, email)) listaParametros.Add(DALGeneric.GenericDB.CriarParametro("_sexo", DbType.String, sexo)) Try Dim cmd = "salvaContato" DALGeneric.AcessoGenericoDB.ExecutarComando(cmd, CommandType.StoredProcedure, listaParametros, DALGeneric.AcessoGenericoDB.TipoDeComando.ExecuteNonQuery) Catch ex As Exception MessageBox.Show("Erro : " & ex.Message, "Erro ao acessar o banco de dados", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub |
Neste código estamos obtendo os valores das caixas de texto e atribuindo a variáveis locais: nome, email e sexo.
A seguir estou definindo um lista de parâmetros do tipo DbParameter e por causa disso (e também por não ter criado uma camada de negócios) eu vou ser obrigado a incluir o namespace System.Data.Common no início do formulário usando a declaração : Imports System.Data.Common
Estou criando os parâmetros usando o método CriarParametro() onde o nome do parâmetro deve estar de acordo com o que foi definido na stored procedure (_nome,_email e _sexo)
Nota: Podemos também usar a sintaxe listaParametros.Add(DALGeneric.GenericDB.CriarParametro("?_nome", DbType.String, nome)) , onde usamos o ponto de interrogação na frente do nome do parâmetro.
Depois estou definindo a stored procedure 'salvaContato' que será usada para incluir as informações na tabela contatos.
Finalmente estou chamando o método ExecutarComando da classe DALGeneric passando os parâmetros.
Executando o projeto e fornecendo os valores nas caixas de texto, após clicar no botão Incluir teremos o resultado abaixo:
3- Excluindo um contato da tabela contatos usando a stored procedure 'deletaContato'
Para excluir um contato vamos informar o código do contato na caixa de texto e passá-lo como parâmetro.
No evento Click do botão de comando Excluir defina o código abaixo:
Private Sub btnExcluir_Click(sender As Object, e As EventArgs) Handles btnExcluir.Click Dim codigo As Integer = Convert.ToInt32(txtCodigo.Text) Dim listaParametros As New List(Of DbParameter) listaParametros.Add(DALGeneric.GenericDB.CriarParametro("_id", DbType.Int32, codigo)) Try Dim cmd = "deletaContato" DALGeneric.AcessoGenericoDB.ExecutarComando(cmd, CommandType.StoredProcedure, listaParametros, DALGeneric.AcessoGenericoDB.TipoDeComando.ExecuteNonQuery) Catch ex As Exception MessageBox.Show("Erro : " & ex.Message, "Erro ao acessar o banco de dados", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub |
A seguir definimos os comandos SQL primeiro usando a stored procedure (cmd) e depois a instrução texto (sql)
A seguir usamos o método ExecutarComando da nossa camada de acesso a dados passando os parâmetros de forma a retornar um dataset (ExecuteDataSet) e um datatable (ExecuteDataTable)
Para o datatable percorremos as linhas e exibimos no listbox e para o dataset atribuímos o resultado ao controle DataGridView.
4- Atualizando um contato usando a stored procedure 'atualizaContato'
Para atualizar um contato vamos informar o código do contato e os novos valores nas caixas de texto e usar a stored procedure atualizaContato.
No evento Click do botão de comando Alterar defina o código abaixo:
Private Sub btnAlterar_Click(sender As Object, e As EventArgs) Handles btnAlterar.Click Dim codigo As Integer = Convert.ToInt32(txtCodigo.Text) Dim nome As String = txtNome.Text Dim email As String = txtEmail.Text Dim sexo As String = txtSexo.Text Dim listaParametros As New List(Of DbParameter) listaParametros.Add(DALGeneric.GenericDB.CriarParametro("_id", DbType.String, codigo)) listaParametros.Add(DALGeneric.GenericDB.CriarParametro("_nome", DbType.String, nome)) listaParametros.Add(DALGeneric.GenericDB.CriarParametro("_email", DbType.String, email)) listaParametros.Add(DALGeneric.GenericDB.CriarParametro("_sexo", DbType.String, sexo)) Try Dim cmd = "atualizaContato" DALGeneric.AcessoGenericoDB.ExecutarComando(cmd, CommandType.StoredProcedure, listaParametros, DALGeneric.AcessoGenericoDB.TipoDeComando.ExecuteNonQuery) Catch ex As Exception MessageBox.Show("Erro : " & ex.Message, "Erro ao acessar o banco de dados", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub
|
O código acima é quase igual ao usado para incluir um novo contato, a diferença é que estamos passando além do nome, email e sexo o código do contato como parâmetro e usando a stored procedure 'atualizaContato'.
Abaixo um exemplo onde alteremos o email do contato macoratti de código igual a 1:
Assim concluímos o teste da nossa camada genérica de acesso a dados. Lembrando que ela é uma camada incipiente que pode e precisa ser aperfeiçoada mas que já da mostra do que pode fazer.
Saliento novamente a necessidade de criar uma camada de negócios para evitar as referências a classes de acesso a dados que eu tive que fazer na camada de interface. Isso nunca deve ocorrer em uma aplicação de produção.
Pegue o projeto completo aqui : DalGenerica.zip
Mar 1:1 Princípio do evangelho de Jesus Cristo, Filho de Deus.
Mar 1:2 Conforme está escrito no profeta Isaías: Eis que envio ante a tua face o meu mensageiro, que há de preparar o teu caminho;
Mar 1:3 voz do que clama no deserto: Preparai o caminho do Senhor, endireitai as suas veredas;
Mar 1:4 assim apareceu João, o Batista, no deserto, pregando o batismo de arrependimento para remissão dos pecados.
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#