C# - Gerenciamento de banco de dados MySQL - I
Neste artigo eu vou mostrar (novamente) como gerenciar um banco de dados MySQL efetuando as operações de acesso, seleção, inclusão , alteração e exclusão usando a linguagem C# e ADO .NET.
Vamos trabalhar usando a arquitetura em 3 camadas definindo assim:
Vamos também criar a entidade Produto que será o objeto do nosso negócio e que possuirá 3 propriedades: ID, Nome e Preco representando assim cada coluna da tabela Estoque. A entidade terá o namespace DTO e a classe Produto.
Eu poderia criar 3 projetos distintos mas para simplificar vou criar as seguintes classes :
Lembrando que em uma aplicação em 3 camadas temos uma hierarquia de chamadas onde :
A UI chama a BLL que chama a DLL que por sua vez acesso os dados e retorna os objetos;
Nunca deverá haver uma chamada direta da UI para a DAL e vice-versa.(Quando usamos os controles de acesso a dados vinculados no formulário estamos fazendo o acesso direto da camada de interface para a DAL ou banco de dados o que não é uma boa prática.)
As ferramentas usadas são:
Se você não possuir o MySQL e o Connector .NET para o MySQL deverá efetuar o download e instalar. A instalação é simples basta clicar no pacote e seguir as orientações aceitando as configurações padrão. Veja a seguir a sequência de telas principais da instalação:
1-tela inicial de instalação do MySQL | 2-Selecione a opção Typical para instalação |
3-Verifique o local onde os arquivos serão instalados | 4-Marque a opção para configurar o MySQL |
5-Marque a opção Standard Configuration | 6-Marque a opção para instalar como um serviço e forneça um nome para o serviço. O nome padrão é MySQL |
7-Informe uma senha ao usuário root | 8-Clique no botão Execute para processar as opções definidas |
Com os componentes instalados vamos efetuar as seguintes tarefas:
Embora eu já tenha descrito como criar um banco de dados no MySQL usando MySQL Administrator vou resumidamente repetir os passos:
Neste momento já temos o banco de dados Cadastro e a tabela Estoque com dois registros.
Abra o SharpDevelop ou o Visual C# 2008 Express e crie um novo projeto do tipo Windows Application com o nome MySQL_C#;
Devemos incluir a referência ao Connector .NET para ter acesso as classes de acesso a dados do MySQL. Para isso clique sobre o nome do projeto e selecione a opção Add Reference;
A seguir inclua uma referência a dll do MySQL Connector .NET selecionando na pasta onde foi instalado e clicando no botão Abrir/Open;
No formulário padrão inclua um controle TabControl e defina dois TabPages:
Na primeira TabPage inclua os seguintes controles:
Na segunda TabPage inclua um controle DataGridView - gdvProdutos.
Acima vemos o leiaute do formulário para cada TabPage.
Vamos iniciar criando o arquivo de classe Produto.cs que irá representar a classe Produto, clicando no nome do projeto e selecionando a opção Add New Item;
Na janela de templates selecione o template Class e informe o nome Produto.cs;
A seguir defina o seguinte código nesta classe onde estamos definindo 3 membros e 3 propriedades da nossa entidade Produto:
using System; namespace DTO { public class Produto { int _id; String _nome; Decimal _preco; public int ID { get {return _id;} set {_id = value;} } public String Nome { get {return _nome;} set {_nome = value;} } public Decimal Preco { get {return _preco;} set {_preco = value;} } } } |
Neste arquivo criamos a classe Produto e definimos os membros _id, _nome e _preco e as propriedades ID, Nome e Preco. Ela será usada para transferência de objetos entre as camadas de interface de negócio e de acesso a dados.
Agora vamos criar o arquivo de classe DAL.cs clicando no nome do projeto e selecionando a opção Add New Item;
Na janela de templates selecione o template Class e informe o nome DAL.cs;
Os pacotes usados nesta classe são:
using System;
using System.Collections.Generic;
using System.Data;
using MySql.Data.MySqlClient;
using DTO;
A seguir vamos definir na classe produtoDAL 6 métodos conforme exibidos abaixo:
Vejamos o código da classe produtoDAL:
Declaramos duas variáveis que serão visíveis na classe:
String
_conexaoMySQL = "";O construtor da classe ProdutoDAL define a string de conexão com o banco de dados MySQL:
public produtoDAL() { _conexaoMySQL = "server=localhost;user id=root;password=password;database=cadastro"; } |
onde temos:
server - localhost , pois estou acessando o
MySQL instalado na minha máquina local;
id = root , pois estou usando o usuário root;
password = password , pois essa foi a senha definida para o usuário root;
database=cadastro, pois esse é o banco de dados que criamos no MySQL;
Agora vejamos os métodos:
1- SelectProdutos - Usada para exibir todos os produtos do estoque;
public DataTable selectProdutos(){ try{ String sql = "SELECT * FROM Estoque"; con = new MySqlConnection(_conexaoMySQL); MySqlCommand cmd = new MySqlCommand(sql,con); MySqlDataAdapter da = new MySqlDataAdapter(); da.SelectCommand = cmd; DataTable dt = new DataTable(); da.Fill(dt); return dt; } catch (Exception ex) { throw ex; } } |
2- selecteProdutoByID() - Usada para retornar uma entidade Produto representando um único produto pelo seu código (id);
public Produto
selectProdutoByID(int id) { try{ String sql = "SELECT * FROM Estoque WHERE id = @id"; con = new MySqlConnection(_conexaoMySQL); MySqlCommand cmd = new MySqlCommand(sql,con); cmd.Parameters.AddWithValue("@id",id); con.Open(); MySqlDataReader dr;
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
produto.ID = Convert.ToInt32(dr["id"]); produto.Nome = dr["Nome"].ToString(); produto.Preco = Convert.ToDecimal(dr["Preco"]); } return produto; } catch (Exception ex) { throw ex; } }
|
3- selectListProdutos() - Usada para retornar uma lista de objetos Produto representando uma coleção de produtos.
public List<Produto> selectListProdutos() { try { using (MySqlConnection conn = new MySqlConnection(_conexaoMySQL)) { using (MySqlCommand command = new MySqlCommand("Select * from Estoque", conn)) { conn.Open(); List<Produto> listaProdutos = new List<Produto>(); using (MySqlDataReader dr = command.ExecuteReader()) { while (dr.Read()) { Produto produto = new Produto(); produto.ID = (int)dr["id"]; produto.Nome = (String) dr["Nome"]; produto.Preco = Convert.ToDecimal(dr["Preco"]); listaProdutos.Add(produto); } } return listaProdutos; } } } catch (Exception ex) { throw new Exception("Erro ao acessar estoque " + ex.Message); } } |
4- insertProduto() - Usada para incluir um novo produto no estoque;
public void insertProduto(Produto produto){ try{ String sql = "INSERT INTO Estoque (nome,preco) VALUES (@nome,@preco)"; con = new MySqlConnection(_conexaoMySQL); MySqlCommand cmd = new MySqlCommand(sql,con); cmd.Parameters.AddWithValue("@nome",produto.Nome); cmd.Parameters.AddWithValue("@preco",produto.Preco); con.Open(); cmd.ExecuteNonQuery(); } catch (Exception ex) { throw ex; } finally{ con.Close(); } } |
5- updateProduto() - Usada para atualizar os dados de um produto no estoque;
public void updateProduto(Produto produto){ try{ String sql = "UPDATE Estoque SET nome= @nome ,preco=@preco WHERE id = @id "; con = new MySqlConnection(_conexaoMySQL); MySqlCommand cmd = new MySqlCommand(sql,con); cmd.Parameters.AddWithValue("@id",produto.ID); cmd.Parameters.AddWithValue("@nome",produto.Nome); cmd.Parameters.AddWithValue("@preco",produto.Preco); con.Open(); cmd.ExecuteNonQuery(); } catch (Exception ex) { throw ex; } finally{ con.Close(); } } |
6- deleteProduto() - Usada para excluir um produto no estoque;
public void deleteProduto(Produto produto){ try{ String sql = "DELETE FROM Estoque WHERE id = @id "; MySqlConnection con = new MySqlConnection(_conexaoMySQL); MySqlCommand cmd = new MySqlCommand(sql,con); cmd.Parameters.AddWithValue("@id",produto.ID); con.Open(); cmd.ExecuteNonQuery(); } catch (Exception ex) { throw ex; } finally{ con.Close(); } } |
Eu mantive o código o mais simples possível usando ADO .NET clássica e instruções SQL. Poderia ter usado stored procedures o que seria mais indicado.
Esta é a nossa camada de acesso a dados e sua responsabilidade e acessar e persistir dados no MySQL, só isso. Veja abaixo uma figura onde temos uma visão da nossa solução:
I |
Aguarde no próximo artigo a continuação onde irei criar a camada de negócios - BLL: C# - Gerenciamento de banco de dados MySQL - II
Eu sei é apenas Visual C#, mas eu gosto...
Referências:
José Carlos Macoratti