C# - Agenda de Contatos - CRUD Básico com SQL Server(para novatos)


 Neste artigo vou apresentar uma agenda de contatos que realiza o CRUD básico no SQL Server usando a linguagem C#.

Esse artigo é um artigo para quem esta iniciando com a linguagem C# e precisa saber como acessar e realizar as operações básicas de manutenção de dados no SQL Server usando ADO .NET.

A aplicação possui somente um formulário e faz o CRUD - Inclusão, exclusão, atualização e seleção -  na tabela Contatos do banco de dados Cadastro do SQL Server.

A seguir temos o script SQL usado para criar a tabela Contatos:

USE [Cadastro]
GO
/****** Object:  Table [dbo].[Contatos]    Script Date: 16/02/2017 08:09:32 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Contatos](
	[id] [int] IDENTITY(1,1) NOT NULL,
	[nome] [nchar](100) NULL,
	[endereco] [nchar](200) NULL,
	[celular] [nchar](15) NULL,
	[telefone] [nchar](15) NULL,
	[email] [nchar](100) NULL,
 CONSTRAINT [PK_Contatos] PRIMARY KEY CLUSTERED 
(
	[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

O único formulário do projeto é visto abaixo:

Resta agora definir o código de cada um dos botões de comando.
 

Recursos usados :

Criando o projeto no VS 2015 Community e definindo o código do formulário

Abra o VS 2015 Community e clique em New Project;

A seguir selecione Visual C# -> Windows Forms Application;

Informe o nome Agenda e clique no botão OK;

Devemos incluir no projeto uma referência ao namespace :  System.Data.SqlClient e System.Data para acessar os recursos da ADO .NET.

using System;
using System.Data;
using System.Windows.Forms;
using System.Data.SqlClient;

No início do formulário vamos declarar a string de conexão e algumas variáveis objetos para usarmos no projeto:
 


  SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Cadastro;Integrated Security=True");
  SqlCommand cmd;
  SqlDataAdapter adapt;
  int ID = 0;
 

No construtor do formulário vamos chamar o método ExibirDados() para acessar a tabela e exibir informações no controle DataGridView:

       public Form1()
        {
            InitializeComponent();
            ExibirDados();
        }

 

A seguir temos o código do método ExibirDados() que abre a conexão, cria um DataTable e acessa todos os registros da tabela Contatos e preenche o DataTable exibindo-o a seguir no DatagridView:

         private void ExibirDados()
        {
            try
            {
                con.Open();
                DataTable dt = new DataTable();
                adapt = new SqlDataAdapter("SELECT * FROM Contatos", con);
                adapt.Fill(dt);
                dgvAgenda.DataSource = dt;
            }
            catch
            {
                throw; 
            }
            finally
            {
                con.Close();
            }
        }

A seguir temos o código do botão Novo que limpa os campos do formulário :

  private void btnNovo_Click(object sender, EventArgs e)
    {
            txtNome.Text = "";
            txtEndereco.Text = "";
            txtCelular.Text = "";
            txtTelefone.Text = "";
            txtEmail.Text = "";
            txtNome.Focus();
   }

Para salvar as informações de um novo Contato usamos o código a seguir no botão Salvar:

        private void btnSalvar_Click(object sender, EventArgs e)
        {
            if (txtNome.Text != "" && txtEndereco.Text != "" && txtCelular.Text != "" && txtTelefone.Text != "" && txtEmail.Text != "")
            {
                try
                {
                    cmd = new SqlCommand("INSERT INTO Contatos(nome,endereco,celular,telefone,email) VALUES(@nome,@endereco,@celular,@telefone,@email)", con);
                    con.Open();
                    cmd.Parameters.AddWithValue("@nome", txtNome.Text.ToUpper());
                    cmd.Parameters.AddWithValue("@endereco", txtEndereco.Text.ToUpper());
                    cmd.Parameters.AddWithValue("@celular", txtCelular.Text.ToUpper());
                    cmd.Parameters.AddWithValue("@telefone", txtTelefone.Text.ToUpper());
                    cmd.Parameters.AddWithValue("@email", txtEmail.Text.ToLower());
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("Registro incluído com sucesso...");
                }
                catch(Exception ex)
                {
                    MessageBox.Show("Erro : " + ex.Message);
                }
                finally
                {
                    con.Close();
                    ExibirDados();
                    LimparDados();
                }
            }
            else
            {
                MessageBox.Show("Informe todos os dados requeridos");
            }
        }

Este código define uma instrução SQL - INSERT INTO - usando parâmetros e o método ExecuteNonQuery() para incluir um novo registro na tabela.

Para Atualizar os dados de um contato temos o código abaixo no botão Atualizar:

       private void btnAtualizar_Click(object sender, EventArgs e)
        {
            if (txtNome.Text != ""  && txtEndereco.Text != "" && txtCelular.Text != ""  && txtTelefone.Text != "" && txtEmail.Text != "")
            {
                try
                { 
                cmd = new SqlCommand("UPDATE Contatos SET nome=@nome, endereco=@endereco, celular=@celular,telefone=@telefone,email=@email WHERE id=@id", con);
                con.Open();
                cmd.Parameters.AddWithValue("@id", ID);
                cmd.Parameters.AddWithValue("@nome", txtNome.Text.ToUpper());
                cmd.Parameters.AddWithValue("@endereco", txtEndereco.Text.ToUpper());
                cmd.Parameters.AddWithValue("@celular", txtCelular.Text.ToUpper());
                cmd.Parameters.AddWithValue("@telefone", txtTelefone.Text.ToUpper());
                cmd.Parameters.AddWithValue("@email", txtEmail.Text.ToLower());
                cmd.ExecuteNonQuery();
                MessageBox.Show("Registro atualizado com sucesso...");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Erro : " + ex.Message);
                }
                finally
                {
                    con.Close();
                    ExibirDados();
                    LimparDados();
                }
            }
            else
            {
                MessageBox.Show("Informe todos os dados requeridos");
            }
        }

Para atualizar registro definimos uma instrução SQL - UPDATE SET.

Para excluir um registro usamos o código a seguir no botão - Deletar :

       private void btnDeletar_Click(object sender, EventArgs e)
        {
            if (ID != 0)
            {
                if (MessageBox.Show("Deseja Deletar este registro ?", "Agenda", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    try
                    {
                        cmd = new SqlCommand("DELETE Contatos WHERE id=@id", con);
                        con.Open();
                        cmd.Parameters.AddWithValue("@id", ID);
                        cmd.ExecuteNonQuery();
                        MessageBox.Show("registro deletado com sucesso...!");
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Erro : " + ex.Message);
                    }
                    finally
                    {
                        con.Close();
                        ExibirDados();
                        LimparDados();
                    }
                }
            }
            else
            {
                MessageBox.Show("Selecione um registro para deletar");
            }
        }

O código para excluir um contato usa a instrução SQL DELETE com a cláusula WHERE e o código do contato.

O usuário pode selecionar uma linha do controle DataGridView para exibir os respectivos dados nas caixas de texto do formulário. O código que faz isso é o seguinte:
 
        private void dgvAgenda_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                ID = Convert.ToInt32(dgvAgenda.Rows[e.RowIndex].Cells[0].Value.ToString());
                txtNome.Text = dgvAgenda.Rows[e.RowIndex].Cells[1].Value.ToString();
                txtEndereco.Text = dgvAgenda.Rows[e.RowIndex].Cells[2].Value.ToString();
                txtCelular.Text = dgvAgenda.Rows[e.RowIndex].Cells[3].Value.ToString();
                txtTelefone.Text = dgvAgenda.Rows[e.RowIndex].Cells[4].Value.ToString();
                txtEmail.Text = dgvAgenda.Rows[e.RowIndex].Cells[5].Value.ToString();
            }
            catch { }
        }

Este projeto foi criado usando uma abordagem para iniciantes mas ele fere os princípios das boas práticas de programação visto que o formulário além de apresentar os dados também faz o acesso e a manutenção dos dados.

Em uma aplicação mais robusta recomenda-se separar o código de acesso a dados em uma classe ou um novo projeto para separar as responsabilidades.

Fica como um desafio a criação de uma classe para acessar os dados e a remoção de todo o código de acesso a dados e suas referências do formulário.

Executando o projeto iremos obter o resultado abaixo:

Pegue o projeto completo aqui :  Agenda.zip

Mas longe esteja de mim gloriar-me, a não ser na cruz de nosso Senhor Jesus Cristo, pela qual o mundo está crucificado para mim e eu para o mundo. 
Gálatas 6:14

 

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

 

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

 

Referências:


José Carlos Macoratti