Desenvolvimento
Vamos entrar criar o banco de dados, neste tutorial vamos usar a Microsoft SQL Server 2008 R2, mas, poderá usar outros SGBD.
Insira o script do banco de dados a seguir:
1
2
3
4
5
6
7
8
9
10
11
12
| CREATE DATABASE bdcontato -- remova as linhas de cima primeiro. Atenção se não vai da erro USE bdcontato CREATE TABLE tbcontato ( codigo INT NOT NULL PRIMARY KEY IDENTITY(1, 1), nome VARCHAR (130), endereco VARCHAR (150), telefone CHAR (13) ); |
.
Vamos criar o projeto em c#, utilizando a IDE Microsoft Visual Studio 2010. Para isso clique no menu File > Nem > Project ou Ctrl+Shift+N.
Em Visual C# > Windows > Windows Forms Application.
Em Name = Digite o nome do Projeto. Ex. sisContato
Na aba Solution Explorer, vamos criar duas pastas que vão ficar responsáveis pela lógica de negocio e de acessos a dados.
Parar isso clique com o botão direito Em SisContato > Add> New Folder
e crie as pastas Dados e Negócios.
Conforme a imagem a seguir:
Camada de Acesso a Dados
Crie a classe Banco na pasta Dados e insira o código a seguir:
Criar a Conexão com o banco de dados
public static string conexao = @"server=.\SQLEXPRESS; Database=bdcontato;Integrated Security=True;";
|
Como vamos saber a conexão com o banco de dados manualmente?
server= Significa o Servidor do Banco de dados. Geralmente para saber onde esta o servidor, entre no SQL Server e copie o nome do Servidor, conforme a imagem:
Database = Nome do banco de dados, não é necessário inserir a extensão do banco (.mdf);
Esses dois são os mais importantes.
Para isso é indiscutível declarar o namespace para acessar os métodos e classe do banco de dados SQL Server.
using System.Data.SqlClient;
|
Abrir a conexão com o banco de dados
SqlConnection conn = new SqlConnection(conexao);
|
Declara o comando SQL, sendo inicializado como vazio (null)
SqlCommand cmd = null;
|
Criar o método para o comando SQL, que ficar responsável por inserir, atualizar e excluir e utilizar o parâmetro para inserir o comando SQL.
1
2
3
4
5
6
7
8
9
10
11
| public void ComandoSQL( string Sql) { //Abre a Conexão conn.Open(); //Inseri o comando SQL e atribuir a conexão do banco de dados cmd = new SqlCommand(Sql, conn); //Executa o comando sql cmd.ExecuteNonQuery(); //Fechar a conexão conn.Close(); } |
Consulta no banco de dados. Utilizar o parâmetro DataGridView para a exibição dos dados, e outro param entro para o comando SQL.
public void Consultar(DataGridView dgv, string Sql)
{
cmd = new SqlCommand(Sql, conn);
conn.Open();
//Diz que o comando é uma query(Texto) e não uma StoredProcedure
cmd.CommandType = CommandType.Text;
//O SqlDataAdapter serve para ligar os dados que estão num banco de
//dados SQL Server com os objetos DataSet e DataTable.
SqlDataAdapter da = new SqlDataAdapter(cmd);
//representa a estrutura de uma tabela de um banco de dados.
DataTable cliente = new DataTable();
//Adiciona ou atualizar linhas em um intervalo especificado no
//DataSet para que correspondam à fonte de dados usando o nome do DataTable, neste caso o 'cliente'
da.Fill(cliente);
//Define a Fonte de dados do DataGridView
dgv.DataSource = cliente;
//Fechar a conexão com o banco de dados
conn.Close();
}
|
Camada de Negócio
Crie uma nova classe chamada RegraNegocio
Vamos criar os campos privados da classe, conforme a seguir:
private int codigo;
private string nome;
private string endereco;
private string telefone;
|
Encapsule os campos, para isso clique no nome do campo (código,nome,endereco e telefone) e Ctrl+R + Ctrl+ E e clique em ok. Conforme a imagem
Feito isso vamos chamar a classe Banco para inserir a regra de negócio.
Banco dal = new Banco();
|
Criar o método para inserir o contato
public void InserirContato()
{
try
{
dal.ComandoSQL("INSERT INTO TBCONTATO(nome,endereco,telefone) VALUES('" + Nome +"','" + Endereco + "','" + Telefone + "')");
}
catch (Exception ex)
{
throw ex;
}
}
|
Criar o método atualizar Contato
public void AtualizarContato()
{
try
{
dal.ComandoSQL("UPDATE tbContato set nome='" + Nome + "',endereco='"+ Endereco + "',telefone= '" + Telefone + "'where codigo= " + Codigo + "");
}
catch (Exception ex)
{
throw ex;
}
}
|
Criar o método Excluir Contato
public void ExcluirContato(Codigo)
{
try
{
dal.ComandoSQL("DELETE FROM tbContato where codigo= " + Codigo + "");
}
catch (Exception ex)
{
throw ex;
}
}
|
Criar o método Preencher DataGridView
public void PreencherDataGrid(DataGridView dgv)
{
dal.Consultar(dgv, "SELECT * FROM tbContato");
}
|
Criar o método para Consultar por Código
public void ConsultarCodigo(DataGridView dgv)
{
dal.Consultar(dgv, "SELECT * FROM tbContato WHERE codigo=" + Codigo + "");
}
|
Criar o método para Consultar por Nome
public void ConsultarNome(DataGridView dgv)
{
dal.Consultar(dgv, "SELECT * FROM tbContato WHERE Nome like '%" + Nome + "%'");
}
|
Criar o método para Consultar por Telefone
public void ConsultarTelefone(DataGridView dgv)
{
dal.Consultar(dgv, "SELECT * FROM tbContato WHERE telefone like '%" + Telefone +"%'");
}
|
Finalizamos a camada de Negócio. No Próximo estaremos desenvolvendo a logica de Apresentação.
Próximo Passo:
Camada de Apresentação
Renomeie o formulário form1.cs para frmContato.cs
Na propriedade do formulário modifique os seguintes:
Nome
|
Valor
|
O que é?
|
Name
|
frmContato
|
Nome do Formulário
|
BackColor
|
White
|
Plano de Fundo
|
Icon
|
Escolha o ícone com extensão .icon
|
Ícone
|
Size
|
509; 733
|
Tamanho do Formulário
|
StartPosition
|
CenterScreen
|
Posição inicia
|
Text
|
Contatos
|
Titulo
|
No topo do formulario, adicione o componente Panel, uma PictureBox e uma label, conforme a imagem a seguir:
Adicione uma groupBox e os componentes a seguir conforme a imagem: utilize label, textbox e uma maskTextBox.
os nomes dos controles são:
textBox1 = txtCodigo
textBox2 = txtNome
textBox3 = txtEndereco
maskedTextBox1 = mkTelefone
Adicione outra groupbox e os controles a seguir conforme a imagem:
button1 = btnNovo
button2 = btnSalvar
button3 = btnAtualizar
button4 = btnExcluir
Adicione outra groupbox com os controles a seguir
combobox1 = cbmFiltro
maskedTextBox1 = mkPesquisar.
Na propriedade Items adicione os seguintes textos:
Código
Nome
Telefone
e no botão pesquisar = btnPesquisar
Adicione a ultima groupbox e dentro dela insira uma DataGridView. Recendo o nome dgvContato
vá para o código do formulário (F7)
insira o código a seguir:
Chamar a classe RegraNegocio
RegraNegocio negocio = new RegraNegocio();
|
Habilitar os controles
private void habilitarControles()
{
txtNome.Enabled = true;
txtEndereco.Enabled = true;
mkTelefone.Enabled = true;
}
|
Limpar os Campos
private void LimparCampo()
{
foreach (Control cont in this.Controls)
{
if (cont is GroupBox)
{
for (int i = 0; i < cont.Controls.Count; i++)
{
if (cont.Controls[i] is TextBox)
(cont.Controls[i] as TextBox).Text = "";
if (cont.Controls[i] is ComboBox)
(cont.Controls[i] as ComboBox).SelectedIndex = -1;
if (cont.Controls[i] is MaskedTextBox)
(cont.Controls[i] as MaskedTextBox).Text = "";
}
}
}
}
|
No evento load do formulário insira o código a seguir
private void frmContato_Load(object sender, EventArgs e)
{
btnNovo.Enabled = true;
negocio.PreencherDataGrid(dgvContato);
}
|
Clique no botão novo e insira o código a seguir:
private void btnNovo_Click(object sender, EventArgs e)
{
habilitarControles();
btnNovo.Enabled = false;
btnAtualizar.Enabled = false;
btnExcluir.Enabled = false;
if (txtNome.Text != null)
{
txtNome.Focus();
btnSalvar.Enabled = true;
}
LimparCampo();
}
|
Clique no botão Salvar e insira o código a seguir:
private void btnSalvar_Click(object sender, EventArgs e)
{
if (txtNome.Text != "")
{
RegraNegocio cln = new RegraNegocio();
cln.Nome = this.txtNome.Text;
cln.Endereco = this.txtEndereco.Text;
cln.Telefone = this.mkTelefone.Text;
cln.InserirContato();
negocio.PreencherDataGrid(dgvContato);
btnSalvar.Enabled = false;
btnAtualizar.Enabled = true;
btnExcluir.Enabled = true;
MessageBox.Show("Contato cadastrado com sucesso",
"Sucesso",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
else
{
txtNome.Focus();
btnNovo.Enabled = false;
MessageBox.Show("Adicione um nome de Usuário",
"Atenção",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
|
Clique no botão Atualizar e insira o código a seguir:
private void btnAtualizar_Click(object sender, EventArgs e)
{
try
{
if (txtCodigo.Text != null)
{
negocio.Codigo = int.Parse(txtCodigo.Text);
negocio.Nome = txtNome.Text;
negocio.Endereco = txtEndereco.Text;
negocio.Telefone = mkTelefone.Text;
negocio.AtualizarContato();
negocio.PreencherDataGrid(dgvContato);
MessageBox.Show("Atualizado com sucesso",
"Sucesso",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
else
{
MessageBox.Show("O Campo código é obrigatório",
"Atenção",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
catch (Exception ex)
{
MessageBox.Show("Não foi possível atualizar os dados pelo seguinte motivo: " + ex.Message);
}
|
Clique no botão excluir e insira o código a seguir:
private void btnExcluir_Click(object sender, EventArgs e)
{
try
{
if (txtCodigo.Text != null)
{
negocio.Codigo = int.Parse(txtCodigo.Text);
negocio.ExcluirContato();
LimparCampo();
negocio.PreencherDataGrid(dgvContato);
btnExcluir.Enabled = false;
btnAtualizar.Enabled = false;
MessageBox.Show("Excluido com sucesso",
"Sucesso",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
else
{
MessageBox.Show("O Campo Código é obrigatório",
"Atenção",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
catch (Exception ex)
{
MessageBox.Show("Não foi possível excluir os dados pelo seguinte motivo: " + ex.Message);
}
}
|
Clique no botão pesquisar e insira o código a seguir:
private void btnPesquisar_Click(object sender, EventArgs e)
{
if (cbbFiltro.Text == "Código")
{
negocio.Codigo = int.Parse(mkPesquisar.Text);
negocio.ConsultarCodigo(dgvContato);
}
if (cbbFiltro.Text == "Nome")
{
negocio.Nome = mkPesquisar.Text;
negocio.ConsultarNome(dgvContato);
}
if (cbbFiltro.Text == "Telefone")
{
negocio.Telefone = mkPesquisar.Text;
negocio.ConsultarTelefone(dgvContato);
}
if (cbbFiltro.Text == "")
{
negocio.PreencherDataGrid(dgvContato);
}
}
|
Clique duas vezes na ComboBox do Filtro de pesquisa e insira o código a seguir:
private void cbbFiltro_SelectedIndexChanged(object sender, EventArgs e)
{
if (cbbFiltro.Text == "Telefone")
{
mkPesquisar.Mask = "(00)0000-0000";
}
else
{
mkPesquisar.Clear();
mkPesquisar.Mask = "";
}
}
|
No evento da DataGridView (no raio) Click insira o código a seguir:
private void dgvContato_Click(object sender, EventArgs e)
{
habilitarControles();
btnAtualizar.Enabled = true;
btnExcluir.Enabled = true;
txtCodigo.Text = dgvContato.CurrentRow.Cells[0].Value.ToString();
txtNome.Text = dgvContato.CurrentRow.Cells[1].Value.ToString();
txtEndereco.Text = dgvContato.CurrentRow.Cells[2].Value.ToString();
mkTelefone.Text = dgvContato.CurrentRow.Cells[3].Value.ToString();
}
|
Conclusão
O Conceito de três camadas veio com o objetivo de separar a lógica de negocio da lógica de apresentação e acesso a dados. Com isto o sistema torna-se mais fácil a manutenção e inserção de funções
Todos Os Créditos da aplicação e códigos retirados do blog NSTutoriais.
Resolvi utilizar esse código em meu site pois alem de gostar do método utilizado, precisei muito dele em outras ocasiões e assim como me foi útil poderá ser útil a alguém futuramente.
ótima postagem, estava fazendo as camadas com projetos diferentes mas dessa forma é bem mais fácil. Vlw
ResponderExcluirEsse emcapsulate field no meu VS 2012 não existe. E segui o tutorial mesmo sem ele e está me exibindo a mensagem: Error 1 Identifier expected C:\VisualStudio\sisContato\sisContato\Negocio\RegraNegocio.cs 42 42 sisContato
ResponderExcluirno metodo: public void ExcluirContato(Codigo)
Gregório no Visual Studio 2012 o código muda pouca coisa, esse código postado é para o sistema feito no visual 2010.
Excluirvc nao consegue passar esse codigo para download, nao consegui
ResponderExcluirconectar no sql.
KKKK
ResponderExcluirse alguem fez manda pra min no meu e-mail por obsequio!
ResponderExcluirguilhermebernardes14@gmail.com