C# - Criando uma aplicação 3 camadas com MySQL
Este artigo vai mostrar como criar uma aplicação com 3 camadas usando o banco de dados MySQL e a linguagem C#.
Baixe a versão 5 MySQL Community Server , que é gratuito no sítio: http://dev.mysql.com/downloads/
Em seguida baixe também o conector para a plataforma .NET em : http://dev.mysql.com/downloads/connector/net/5.2.html
A instalação padrão é muito simples basta seguir as orientações do assistente. Recomendo alterar a senha do usuário root.
Agora baixe e instale o MySQL Administrator para administrar o servidor MySQL.
Vamos instalar também uma ferramenta gráfica para poder trabalhar com o MySQL para executar consultas e criar stored procedures: MySQL Query Browser
Obs: As duas últimas ferramentas são disponibilizadas em um único pacote em : http://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-gui-tools-5.0-r12-win32.msi/from/pick
Haja download , mas em compensação é tudo grátis...
Após terminar a instalação de todas as ferramentas indicas você pode conferir no Windows , Menu Iniciar -> Todos Programas a relação dos programas instalados:
Agora execute o MySQL Administrator e abra o MySQL; se tudo foi realmente instalado corretamente você deverá obter o seguinte resultado:
Vamos criar o banco de dados Cadastro. Clique com o botão direito do mouse sobre a área do menu inferior selecione Create New Schema;
Em seguida selecione o banco de dados criado e clique com o botão direito do mouse selecionando a opção Create New Table;
Defina então a estrutura da tabela Alunos com os campos conforme figura exibida a seguir;
Abra o MySQL Query Browser e usando a instrução SQL INSERT INTO inclua alguns valores na tabela conforme figura abaixo;
Para exibir os dados incluídos execute a instrução SELECT conforme a figura a seguir;
Já temos o banco de dados Cadastro e a tabela Alunos criados no banco de dados MySQL. Vamos criar agora uma aplicação usando 3 camadas.
Se fala muito em camadas ultimamente mas o conceito é antigo e tem como objetivo separar a lógica de negócio da interface e do acesso aos dados de forma a facilitar a manutenção e a escalabilidade da aplicação.
Eu vou usar o Visual C# 2008 Express para criar a nossa aplicação com 3 camadas. Abra o Visual C# e crie um novo projeto do tipo Windows Forms Application com o nome de TresCamadas;
Nossa aplicação será constituída de :
A primeira coisa que vamos fazer é definir a string de conexão com o banco de dados Cadastro do MySQL no arquivo App.config conforme o código:
<? xml version="1.0" encoding="utf-8" ?>< configuration>< appSettings>< add key ="ConexaoBD" value="uid=root; password=******; database=Cadastro"/></ appSettings></ configuration> |
A string de conexão acima esta usando a porta padrão 3306. O servidor padrão é localhost.
A seguir temos algumas strings de conexão possíveis:
Padrão | Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword; |
Definindo a porta |
Server=myServerAddress;Port=1234;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
|
Usando criptografia |
Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;
Encryption=true;
|
myServerAddress= o nome do servidor myDataBase= o nome do banco de dados myUsername= nome do usuário myPassword=senha
Agora vamos definir a camada de negócios no projeto;
No menu Project opção Add New Item selecione o template Class e informe o nome Alunos.cs;
A seguir inclua o código abaixo na classe Alunos.cs;
using System;namespace Macoratti{ /// <summary> /// Descrição para a classe Alunos que representa um aluno /// </summary> public class Alunos{ private int _alunoID; public int AlunoID { get { return _alunoID;} set{ _alunoID = value;} } private string _nome; public string Nome { get{ return _nome;} set{ _nome = value;} } private string _endereco; public string Endereco { get{ return _endereco;} set{ _endereco = value;} } private int _idade; public int Idade { get{ return _idade;} set{ _idade = value;} } public Alunos(){ } public Alunos(string nome,string endereco, int idade) { this.Nome = nome;this.Endereco = endereco; this.Idade = idade; } } } |
A classe Alunos possui
definidos : - 4 propriedades :
- dois construtores
|
A classe tem o objetivo de representar um objeto Aluno definindo as propriedades codigo, nome, endereco e idade e dois construtores;
Agora vamos criar uma nova classe chamada AlunosBD.cs que será responsável por acessar e tratar os dados, e incluir nela o seguinte código:
using System;using System.Data;using System.Data.SqlClient;using System.Collections;using System.Configuration;using MySql;using MySql.Data;using MySql.Data.MySqlClient;namespace Macoratti{ /// <summary> /// descricao para a camada de acesso a dados /// </summary> public class alunosDB{ string Con; //obtem a strind e conexão do arquivo App.config public alunosDB() { Con = ConfigurationSettings.AppSettings["ConexaoBD"]; }
//inclui um novo aluno na tabela public void IncluirAluno(Alunos alunos){ MySqlConnection CN = new MySqlConnection(Con); MySqlCommand Com = CN.CreateCommand();Com.CommandText = "INSERT INTO Alunos(nome,endereco,idade) Values(?nome,?endereco,?idade)";Com.Parameters.AddWithValue( "?nome", alunos.Nome);Com.Parameters.AddWithValue( "?endereco", alunos.Endereco);Com.Parameters.AddWithValue( "?idade", alunos.Idade); try{ CN.Open(); int regitrosAfetados = Com.ExecuteNonQuery();} catch(MySqlException ex){ throw new ApplicationException(ex.ToString());} finally{ CN.Close(); } } //Obtem todos os alunos da tabela public DataTable getAlunos(){ MySqlConnection CN = new MySqlConnection(Con); MySqlCommand cmd = CN.CreateCommand(); MySqlDataAdapter da;cmd.CommandText = "SELECT * from Alunos"; try { CN.Open(); cmd = new MySqlCommand(cmd.CommandText,CN);da = new MySqlDataAdapter(cmd); // DataTable dtAlunos = new DataTable();da.Fill(dtAlunos); return dtAlunos;} catch (MySqlException ex){ throw new ApplicationException(ex.ToString());} finally{ CN.Close(); } } } }
|
A classe AlunosBD possui dois métodos:
A classe possui um construtor que obtêm a string de conexão contida no arquivo App.Config;
Vamos criar a camada de interface usando o formulário Form1.cs;
inclua no formulário os controles Label, TextBox , Button e DataGridView conforme o leiaute da figura abaixo:
A seguir vamos mostrar como as camadas estão definidas na aplicação e como elas se comunicam.
Tenha uma coisa em sua mente, quando se fala em camadas, não estamos falando em camadas físicas separadas, mas em camadas lógicas.
A figura abaixo é um esquema bem simples de como tudo acontece:
A camada de apresentação solicita uma informação e a envia para a camada de negócios Aluno.cs , nesta classe temos a representação dos objetos Alunos;
Obs: Na verdade a classe aluno.cs seria um Data Transfer Object ( DTO) e não uma camada. Se bem que eu poderia aproveitar a classe e incluir nela o código para a camada de negócios, o que não é usual, mas possível. Como é um artigo introdutório eu vou considerar a classe aluno.cs como a camada de negócios mas em outros artigos eu vou criar a BLL separada e que vai usar a DTO onde temos a representação das entidades do negócio. Rigorosamente falando teríamos aqui não 3 mas 2 camadas.
A camada de acesso a dados, AlunosBD.cs, recebe a solicitação e a envia para o banco de dados MySQL retornando a informação para a camada de apresentação.
Na verdade o nosso exemplo é muito simples e poderia ser incrementado para melhor ilustrar o comportamento mas o objetivo é ser bem simples para que os que estão iniciando agora possam compreender melhor.
Vejamos então o código do botão Salvar :
private void button1_Click(object sender, System.EventArgs e){ if (txtNome.Text.Equals("")){ MessageBox.Show("Informe o nome do aluno.");return; } try{
alunosDB alunoBD = new alunosDB(); Alunos alunoReg = new Alunos(txtNome.Text, txtEndereco.Text, int.Parse(txtIdade.Text)); alunoBD.IncluirAluno(alunoReg); MessageBox.Show("Registro salvo com sucesso."); button2.PerformClick(); } catch(Exception c) { MessageBox.Show(c.ToString()); } } |
Ao clicar no botão Salvar o código faz uma validação simples e cria uma instância da classe AlunosBD() para em seguida criar uma instância da classe Alunos();
Observe que estamos passando um objeto Aluno para o método incluirAluno() - alunoBD.IncluirAluno(alunoReg);
A camada de acesso a dados recebe então os parâmetros e acesso o banco de dados;
Vejamos agora o código do botão Limpar :
private
void button2_Click(object
sender, System.EventArgs
e)
{ alunosDB alunoBD = new alunosDB();txtID.Text= "";txtNome.Text= "";txtEndereco.Text= "";txtID.Focus(); dgvAlunos.DataSource = alunoBD.getAlunos(); }
|
O código cria uma instância da classe de acesso a dados , limpa os controles e chama o método getAlunos() que retorna um DataTable. O adequado seria o método retornar uma coleção de Alunos, mas para tornar mais simples o código optei por este método.
Embora não tenhamos implementando uma lógica 100% orientada a objetos ela é um passo além daquele velho costume de colocar todo o código embutido no formulário. Tenha certeza que desta forma você ganha em ter um código mais limpo e fácil de manter.
Pegue o projeto completo aqui: TresCamadas.zip (sem a base de dados MySQL)
Até o próximo artigo .NET.
referências:
MySQL - Vinculando , Importando e Exportando
tabelas do Access
Visual Basic - Acessando MySQL com ADO usando
um Driver ODBC
Visual Basic - Acessando MySQL com ADO
VB e MySQL - Gerenciando
dados
MySQL - Distribuindo o MySQL com sua
aplicação
MySQL - Operações básicas com SQL
ASP.NET - Acesso ao MySQL
Trabalhando com aplicações em 3
camadas
ObjectDataSource - Trabalhando em
camadas
VB.NET - Criando uma aplicação em 3
camadas
Trabalhando com aplicações em 3
camadas - Parte IV
ASP.NET - Trabalhando em
camadas
José Carlos Macoratti