Neste artigo vou apresentar uma agenda de contatos que realiza o CRUD básico no SQL Server usando a linguagem C#. |
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:
|
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Visual Studio - Dica de produtividade - Quick Launch - Macoratti.net
Visual Studio - Dica de produtividade - Nuget - Macoratti.net
C# - SQL Server - Acesso e manutenção de dados (CRUD) - Macoratti