Sistemas C#

Aqui estarão os sistemas em C#:

Nesse artigo Estaremos fazendo um sistema de cadastro em 3 camadas e usando o windows form.



Desenvolvimento

 Aqui estaremos desenvolvendo um sistema de contato, com o objetivo de aprender na prática o conceito de três camadas. Na introdução podemos concluir que o conceito de três camadas, tem por objetivo separar a lógica de apresentação da lógica de negocio e da lógica de acesso ao banco.
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();

        }

Próximo Passo:

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.

6 comentários:

  1. ótima postagem, estava fazendo as camadas com projetos diferentes mas dessa forma é bem mais fácil. Vlw

    ResponderExcluir
  2. Esse 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
    no metodo: public void ExcluirContato(Codigo)

    ResponderExcluir
    Respostas
    1. Gregório no Visual Studio 2012 o código muda pouca coisa, esse código postado é para o sistema feito no visual 2010.

      Excluir
  3. vc nao consegue passar esse codigo para download, nao consegui
    conectar no sql.

    ResponderExcluir
  4. se alguem fez manda pra min no meu e-mail por obsequio!
    guilhermebernardes14@gmail.com

    ResponderExcluir