C#
- CRUD Básico com Linq to SQL
Embora o Entity Framework tenha recebido todos os holofotes e o LINQ to SQL esteja na penumbra, relegado ao papel de coadjuvante, ainda temos a opção de usar os recursos do LINQ to SQL em nossas aplicações.
É claro que dependendo do cenário o LINQ to SQL deve dar lugar ao Entity Framework visto que esta ferramenta ORM recebe agora todos os esforços de desenvolvimento enquanto que o LINQ to SQL permanece apenas por uma questão de compatibilidade.
Neste artigo eu vou mostrar como podemos usar o LINQ to SQL em uma aplicação Windows Forms para realizar as operação CRUD para incluir, editar e excluir dados de um banco de dados SQL Server.
Eu vou usar o Visual Studio 2012 Professional versão trial
Abra o Visual Studio 2012 e no menu File clique em New Project;
A seguir selecione o template Visual C# -> Windows -> Windows Forms Application informando o nome CRUD_LinqToSQL;
![]() |
Vamos agora incluir uma referência ao Linq to SQL no nosso projeto;
No menu Project clique em Add New Item e a seguir selecione o template LINQ to SQL Classes informando o nome LinqDados.dbml e clique no botão Add;
![]() |
A seguir abra a Janela Server Explorer e defina uma conexão com um banco de dados SQL Server.
Eu estou usando uma conexão com o banco de dados Cadastro.mdf e vou usar a tabela Clientes;
Selecione a tabela desejada, no nosso caso Clientes, e arraste para o descritor LINQ to SQL que irá gerar o mapeamento da tabela para a classe Cliente:
![]() |
Vamos agora incluir no formulário form1.cs um controle DataGridView chamado dgvClientes e 4 botões de comando: btnIncluir, btnAtualizar, btnDeletar e uma Label chamada lblmsg conforme o leiaute da figura a seguir:
![]() |
Vamos agora ao código da aplicação...
Declare os seguintes namespaces no formulário form1.cs:
using System;
using System.Linq;
using System.Windows.Forms;
Logo após a declaração do formulário form1 vamos definir as variáveis e objetos usados no projeto:
private int
contaLinhas;
private int RowId = 0;
private int _id = 0;
private string _nome;
private string _endereco;
private string _telefone;
private string _email;
LinqDadosDataContext db = new LinqDadosDataContext();
No evento Load do formulário digite o código abaixo:
private void Form1_Load(object sender, EventArgs e)
{
BindDataGridView();
}
|
O código da rotina BindDataGridView() é dado a seguir:
private void BindDataGridView()
{
var getData = from c in db.Clientes
select c;
dgvClientes.DataSource = getData;
dgvClientes.Columns[0].ReadOnly = true;
contaLinhas = dgvClientes.RowCount - 1;
}
|
No evento CellClick do controle DataGridView devemos definir o código a seguir onde obtemos o valor atual do índice da linha e o valor do código do cliente (_id)
private void dgvClientes_CellClick(object sender, DataGridViewCellEventArgs e)
{
RowId = dgvClientes.CurrentRow.Index;
_id = Convert.ToInt32(dgvClientes[0, RowId].Value);
contaLinhas = dgvClientes.RowCount - 1;
if (RowId == contaLinhas)
{
btnIncluir.Visible = true;
}
btnDeletar.Visible = true;
btnAtualizar.Visible = true;
}
|
No evento click do botão Incluir verificamos se as células estão preenchidas e obtemos os valores para a seguir atribuí-los a entidade cliente e persisti-la na base de dados:
private void btnIncluir_Click(object sender, EventArgs e)
{
if (dgvClientes.Rows[RowId].Cells[1].FormattedValue.ToString() != "")
{
_nome = dgvClientes.Rows[RowId].Cells[1].Value.ToString();
}
else { _nome = null; }
if (dgvClientes.Rows[RowId].Cells[2].FormattedValue.ToString() != "")
{
_endereco = dgvClientes.Rows[RowId].Cells[2].Value.ToString();
}
else { _endereco = null; }
if (dgvClientes.Rows[RowId].Cells[3].FormattedValue.ToString() != "")
{
_telefone = dgvClientes.Rows[RowId].Cells[3].Value.ToString();
}
else { _telefone = null; }
if (dgvClientes.Rows[RowId].Cells[4].FormattedValue.ToString() != "")
{
_email = dgvClientes.Rows[RowId].Cells[4].Value.ToString();
}
else { _email = null; }
try
{
Cliente cli = new Cliente();
if (_nome != null && _endereco != null && _telefone != null && _email != null)
{
cli.nome = _nome;
cli.endereco = _endereco;
cli.telefone = _telefone;
cli.email = _email;
//db.Clientes.InsertOnSubmit(cli);
db.SubmitChanges();
}
else
{
MessageBox.Show("Informe os valores para inclusão...");
}
BindDataGridView();
lblmsg.Text = "Registro incluído com sucesso !!";
lblmsg.Visible = true;
}
catch (Exception ex)
{
throw ex;
}
}
|
No evento click do botão Atualizar também obtemos os valores das células em edição obtemos os dados atuais e atualizamos os valores :
private void btnAtualizar_Click(object sender, EventArgs e)
{
if (dgvClientes.Rows[RowId].Cells[1].Value != null)
{
_nome = dgvClientes.Rows[RowId].Cells[1].Value.ToString();
}
if (dgvClientes.Rows[RowId].Cells[2].Value != null)
{
_endereco = dgvClientes.Rows[RowId].Cells[2].Value.ToString();
}
if (dgvClientes.Rows[RowId].Cells[3].Value != null)
{
_telefone = dgvClientes.Rows[RowId].Cells[3].Value.ToString();
}
if (dgvClientes.Rows[RowId].Cells[4].Value != null)
{
_email = dgvClientes.Rows[RowId].Cells[4].Value.ToString();
}
if (_id != 0)
{
var getData = (from cliente in db.Clientes
where cliente.id == _id
select cliente).Single();
getData.nome = _nome;
getData.endereco = _endereco;
getData.telefone = _telefone;
getData.email = _email;
db.SubmitChanges();
BindDataGridView();
lblmsg.Text = "Registros atualizados com sucesso !!";
lblmsg.Visible = true;
}
}
|
No botão Deletar o código solicita a confirmação do usuário e percorre as células do grid para obter o id do cliente da célula selecionada. A Seguir obtemos os valores atuais da entidade e usando o método DeleteOnSubmit() deletamos a linha selecionada:
private void btnDeletar_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Deseja excluir o registro selecionado?",
"Aviso", MessageBoxButtons.YesNo,
MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2, 0, false)
== DialogResult.Yes)
{
for (int i = 0; i < dgvClientes.SelectedRows.Count; i++)
{
RowId = dgvClientes.SelectedRows[i].Index;
_id = Convert.ToInt32(dgvClientes[0, RowId].Value);
if (_id != 0)
{
var getData = (from cliente in db.Clientes
where cliente.id == _id
select cliente).Single();
db.Clientes.DeleteOnSubmit(getData);
db.SubmitChanges();
}
}
}
lblmsg.Text = "Registro deletado com sucesso !!";
lblmsg.Visible = true;
BindDataGridView();
}
|
O botão Sair apenas solicita a confirmação para encerrar a aplicação;
private void btnSair_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Deseja encerrar a aplicação ?",
"Aviso", MessageBoxButtons.YesNo,
MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2, 0, false)
== DialogResult.Yes)
{
this.Close();
}
}
|
Executando o projeto iremos obter:
![]() |
O que mostrei aqui é mais uma das diversas maneiras de realizarmos a manutenção de dados de forma bem simples usando o DataGridView e o LINQ to SQL.
Pegue o projeto completo aqui:
CRUD_LinqToSQL.zip
Joã 4:21
Disse-lhe Jesus: Mulher, crê-me, a hora vem, em que nem neste monte, nem em Jerusalém adorareis o Pai.Joã 4:22
Vós adorais o que não conheceis; nós adoramos o que conhecemos; porque a salvação vem dos judeus.Joã 4:23
Mas a hora vem, e agora é, em que os verdadeiros adoradores adorarão o Pai em espírito e em verdade; porque o Pai procura a tais que assim o adorem.Referências: