C# - Criando um projeto de Acesso a Dados - 4
Se você esta chegando agora ou já vem acompanhando esta série de artigos preste atenção no histórico do que já foi feito até aqui: |
1- SharpDevelop - Criando um projeto de Acesso a Dados - Criamos um projeto usando C# e SharpDevelop com acesso a dados onde apenas fazíamos a seleção dos dados e exibíamos em um datagridview; (O projeto pode ser aberto também no Visual C# Express Edition)
2- SharpDevelop - Criando um projeto de Acesso a Dados - 2 - Estendemos o projeto inicial e adicionamos a possibilidade de incluir novos dados usando o SharpDevelop. (O projeto pode ser aberto também no Visual C# Express Edition)
3- SharpDevelop - Criando um projeto de Acesso a Dados - 3 - Ainda usando o SharpDevelo,p mostramos como usar consultas parametrizadas para incluir dados.(O projeto pode ser aberto também no Visual C# Express Edition)
E agora o que vamos fazer ?
A partir deste artigo eu vou passar a usar o Visual C# Express Edition ao invés do SharpDevelop. (Ele também e grátis e tb é fácil de usar.)
Por que eu vou fazer isso ?
Apenas para mostrar como usar o Visual C# e porque eu ainda não o usei; mas poderíamos perfeitamente continuar a usar o SharpDevelop e, se você quiser , pode também abrir o projeto no SharpDevelop.
Eu vou vou implementar na aplicação todas operações CRUD (Create, Update, Delete) que estão faltando:
De forma que ao final você vai ter uma aplicação simples acessando um banco de dados Access com as funcionalidades para incluir, alterar, excluir e procurar dados, ou seja, uma aplicação C# completa com acesso a dados com as principais operações básicas.
Assim, você não vai poder mais reclamar.
Abra então o Visual C# Express Edition (se não tiver faça o download em: http://www.microsoft.com/express/download ) e abra o projeto com o qual já estávamos trabalhando. (c_AcessoBD.zip)
Abra o formulário form1.cs e inclua 3 botões de comando logo abaixo do datagridview;
A seguir no menu Project selecione a opção Add Windwos Forms e inclua um formulário windows , form3.cs, que será usado para alterar dados;
Repita o processo e inclua mais 2 formulários windows a saber: form4.cs para excluir dados e form5.cs para procurar dados e altere o título de cada um deles conforme a funcionalidade para qual será usado definindo também a propriedade StartPosition igual a CenterScreen.
Alterando dados com C#
Vamos agora implementar a funcionalidade para alterar dados usando C# com Visual C# Express Edition.
Abra o formulário form3.cs e inclua 7 controles TextBox e 7 Controles Labels e dois controles Button conforme o leiaute abaixo:
Temos os
seguintes controles inseridos neste formulário:
- 7 controles Labels
- 2 controles Button
|
Defina também no inicio do formulário as seguintes variáveis correspondentes aos campos da tabela Clientes:
public string nome, endereco, cidade, estado, cep, telefone;Não esqueça de incluir o namespace : using System.Data.OleDb;
No Evento Load do formulário inclua o código abaixo que irá preencher os controles no formulário com os dados:
private void
Form3_Load(object sender,
EventArgs e)
{ txtCodigo.Text = codigoID; txtNome.Text = nome; txtEndereco.Text = endereco; txtCidade.Text = cidade; txtEstado.Text = estado; txtCep.Text = cep; txtTelefone.Text = telefone; }
|
No evento Click do botão Alterar digite o código a seguir:
private void
btnAlterar_Click(object sender,
EventArgs e)
{ if (validaDados()) AlterarDados(); else MessageBox.Show("Dados Inv lidos..."); txtNome.Focus(); return; } |
A rotina validaDados irá verificar se os dados informados são válidos , e , seu código é dado a seguir:
private Boolean validaDados() { if (txtNome.Text == string.Empty)
return
false; if (txtEndereco.Text == string.Empty) return false;
if (txtCidade.Text == string.Empty) return false;
if (txtEstado.Text == string.Empty) return false;
if (txtCep.Text == string.Empty) return false;
return true; } |
A rotina AlterarDados() é quem realmente irá efetivar as alterações na tabela Clientes:
private void
AlterarDados()
{
//cria a conexÆo com o banco de dados OleDbConnection dbConnection = new OleDbConnection(strConnection);
try { // abre o banco de dados dbConnection.Open(); // executa a instru‡Æo SQL cmdAlterar.ExecuteNonQuery(); // MessageBox.Show("Dados Alterados com sucesso.");} //Trata a exce‡Æo catch (OleDbException ex){ MessageBox.Show("Error: " + ex.Message); } finally { //fecha a conexao dbConnection.Close(); } } |
Cabe destacar no código acima a instrução SQL para atualizar os dados:
"UPDATE
Clientes SET nome ='" + txtNome.Text.Replace("'",
"''") + "', endereco='"
+ txtEndereco.Text + "', _ cidade='" + txtCidade.Text + "', estado='" + txtEstado.Text + "', cep='" + txtCep.Text + "', telefone='" + _ txtTelefone.Text + "' WHERE codigo=" + int.Parse(codigoID) + ""; |
Note que estou usando o método Replace no nome informado para substituir aspas simples (') por aspas duplas(''). O objetivo é evitar problemas com nomes que usam apóstrofe.
Agora feche o formulário form3.cs e abra o formulário form1.cs, clique duas vezes sobre o botão - Alterar e inclua o seguinte código no seu evento Click:
private void
btnAlterar_Click(object sender,
EventArgs e)
{
try { //obtem o c¢digo do cliente a partir da linha selecionada no datagridview codigoID = dgvDados[0, linhaAtual].Value.ToString(); } catch (Exception ex) { MessageBox.Show("Erro..." + ex.Message); }
if (linhaAtual >= 0) { //obtem dados do datagridview e atribui as vari veis definidas no formulario f3 obtemDadosGrid();
// f3.codigoID = codigoID; f3.nome = nome; f3.endereco = endereco; f3.cidade = cidade; f3.estado = estado; f3.cep = cep; f3.telefone = telefone; //exibe o formul rio para altera‡Æo f3.ShowDialog(); //atualiza o grid e reexibe os dados dgvDados.Update(); iniciaAcesso(); } } |
O código acima irá obter o código do cliente a partir da linha selecionada e preencher com os dados da linha as variáveis que definimos no formulário form3.cs abrindo o formulário form3.cs com os dados para alteração.
Falta mostrar ainda a rotina obtemDadosGrid() que obtém os valores de cada um dos campos a partir da linha selecionada no datagridivew usando as posições da colunas. Desta forma a coluna nome é a segunda coluna e tem o valor do índice igual a 1 , e assim por diante...
private void
obtemDadosGrid()
{ //obtém os dados do datagridview da linha selecionada usando as posi‡äes das colunas //a primeira coluna ‚ a coluna 0 a segunda ‚ a coluna 1 , e , assim por diante nome = dgvDados[1, linhaAtual].Value.ToString(); endereco = dgvDados[2, linhaAtual].Value.ToString(); cidade = dgvDados[3, linhaAtual].Value.ToString(); estado = dgvDados[4, linhaAtual].Value.ToString(); cep = dgvDados[5, linhaAtual].Value.ToString(); telefone = dgvDados[6, linhaAtual].Value.ToString(); // } |
Veja abaixo um exemplo de alteração dos dados de uma linha selecionada no datagridview:
Excluindo dados com C#
Vamos agora implementar a exclusão dos dados:
Abra o formulário form4.cs e inclua 7 controles TextBox e 7 Controles Labels e dois controles Button conforme o leiaute abaixo:
Temos os
seguintes controles inseridos neste formulário:
- 7 controles Labels
- 2 controles Button
|
Defina também no inicio do formulário as seguintes variáveis correspondentes aos campos da tabela Clientes:
public string nome, endereco, cidade, estado, cep, telefone;Não esqueça de incluir o namespace : using System.Data.OleDb;
No Evento Load do formulário inclua o código abaixo que irá preencher os controles no formulário com os dados:
private void
Form4_Load(object sender,
EventArgs e)
{ txtCodigo.Text = codigoID; txtNome.Text = nome; txtEndereco.Text = endereco; txtCidade.Text = cidade; txtEstado.Text = estado; txtCep.Text = cep; txtTelefone.Text = telefone; } |
No evento Click do botão Excluir do formulário coloque o seguinte código:
private void
btnExcluir_Click(object sender,
EventArgs e)
{ //solicita‡Æo confirma‡Æo para excluir if (MessageBox.Show("Confirma exclusÆo? ", "Excluir", MessageBoxButtons.YesNo) == DialogResult.Yes){ ExcluirDados(); } } |
A rotina ExcluirDados() é quem vai excluir os dados da tabela Clientes e possui o seguinte código:
private void
ExcluirDados()
{ //define string de conexÆo - Provedor + fonte de dados (caminho do banco de dados e seu nome) string strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\dados\\Cadastro.mdb";
//define instru‡Æo SQL para excluir dados da tabela Clientes - DELETE FROM tabela Where <criterio> string strSQL = "DELETE FROM clientes WHERE codigo=" + int.Parse(codigoID) +"";
//cria a conexÆo com o banco de dados OleDbConnection dbConnection = new OleDbConnection(strConnection);
//Cria o comando que inicia a instru‡Æo SQL para exclusÆo OleDbCommand cmdExcluir = new OleDbCommand(strSQL, dbConnection);try { // abre o banco de dados dbConnection.Open();
// executa a instru‡Æo SQL cmdExcluir.ExecuteNonQuery(); // MessageBox.Show("Dados Exclu¡dos com sucesso.");} //Trata a exce‡Æo catch (OleDbException ex){ MessageBox.Show("Error: " + ex.Message); } finally { //fecha a conexao dbConnection.Close(); } } |
Cabe destacar a instrução SQL usada para excluir os dados: "DELETE FROM clientes WHERE codigo=" + int.Parse(codigoID) +"";
Observe que estou convertendo o parâmetro codigoID de string para int: int.Parse(codigoID)
Feche o formulário form4.cs e abra novamente o formulário form1.cs que contém o datagridview. A seguir no evento Click do botão de comando Excluir inclua o seguinte código:
private void
btnExcluir_Click(object sender,
EventArgs e)
{ try { //obtem o c¢digo do cliente a partir da linha selecionada no datagridview codigoID = dgvDados[0, linhaAtual].Value.ToString(); } catch (Exception ex) { MessageBox.Show("Erro..." + ex.Message); }
if (linhaAtual >= 0) { //obtem dados do datagridview e atribui as vari veis definidas no formulario f4 obtemDadosGrid(); Form4 f4 = new Form4(); // f4.codigoID = codigoID; f4.nome = nome; f4.endereco = endereco; f4.cidade = cidade; f4.estado = estado; f4.cep = cep; f4.telefone = telefone; //exibe o formul rio para exclusÆo f4.ShowDialog(); //atualiza o grid e reexibe os dados dgvDados.Update(); iniciaAcesso(); } }
|
A rotina obtemDadosGrid() já foi exibida no tópico anterior.
Veja a seguir um exemplo de exclusão de dados para o cliente de código igual a 8 selecionado no datagridview.
Filtrando dados com C#
Finalmente para encerrar nossa aplicação com acesso a dados usando C# falta uma rotina para filtrar dados pois como os dados estão sendo exibidos no DataGridView a medida que a quantidade de dados cresce vai ficando cada vez mais difícil e trabalhoso selecionar uma linha para alterar e/ou excluir.
Por isso vou criar uma rotina para filtrar os dados exibidos no Datagridview conforme um critério informado pelo usuário. Isso pode ser feito de diversas formas e eu optei por executar um instrução SQL para filtrar pelo nome do cliente. O usuário informe o nome completo ou parcial que será usado como critério para montar a instrução SQL que será executada. A estrutura do SQL usado é :
SELECT campos FROM tabela WHERE nome LIKE criterio
Abra então o formulário form5.cs e inclua um controle Label , um controle TextBox (txtNome) e dois botões de comando : Localizar(btnLocalizar) e Sair (btnFechar):
A seguir defina as seguintes variáveis no formulário:
private string criterio = "";No evento Click do botão Localizar inclua o código a seguir:
private void
btnLocalizar_Click(object sender,
EventArgs e)
{
if (criterio != "") { sqlString = "SELECT * FROM Clientes Where nome LIKE '" + criterio + "%'"; this.Close(); } else { MessageBox.Show("Informe o nome a procurar", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning); } }
|
Este código monta a instrução SQL atribuindo-a a uma variável pública sqlString que será usada no formulário principal form1.cs para executar a instrução SQL filtrando os dados.
Feche o formulário form5.cs e abra o formulário form1.cs. No evento Click do botão Procurar digite o código a seguir:
private void
btnProcurar_Click(object sender,
EventArgs e)
{
Form5 f5= new
Form5(); f5.ShowDialog();
carregaGrid(f5.sqlString); }
|
Este código cria uma instância do formulário form5.cs e abre-o na forma modal; em seguida verifica se a variável sqlString do formulário f5 não é vazia nem nula; neste caso executa a rotina carregaGrid() passando a instrução SQL montada.
A rotina carregaGrid() é dada abaixo:
private void
carregaGrid(string criterioSQL)
{
ds = new DataSet();
Conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\dados\\" + bd);
{ //abre a conexao Conn.Open(); } catch (System.Exception e) { MessageBox.Show(e.Message.ToString()); } if (Conn.State == ConnectionState.Open) { //se a conexÆo estiver aberta usa uma instru‡Æo SQL para selecionar os registros da tabela clientes //SELECT campos FROM tabela da = new OleDbDataAdapter(criterioSQL, Conn); da.Fill(ds, "Tabela");
dgvDados.DataSource = ds; dgvDados.DataMember = "Tabela"; } }
|
Esta rotina executa a instrução SQL para filtrar os dados exibindo-os no datagridview.
Veja abaixo um exemplo de filtro onde o critério informado para o nome do cliente pelo usuário foi a letra M:
Agora acabamos e podemos dizer que temos um pequeno projeto feito em C# com acesso a dados onde realizarmos as operações básicas de manutenção de dados.
Temos um projeto simples que foi feito sem a ajuda dos assistentes que funciona corretamente mas a forma como foi desenvolvido apresenta diversos problemas:
Com isso concluímos que temos que melhorar a aplicação e podemos fazer isso da seguinte forma:
Criando camadas com responsabilidades distintas e independentes uma das outras fazemos com que qualquer alteração em uma das camadas não se replique para as demais camadas e com isso temos um código mais limpo e fácil de manter.
Aguarde o próximo artigo onde irei mostrar como criar as camadas de acesso a dados(DAL) e da lógica de negócio (BLL) de forma a tornar a nossa aplicação mais robusta e com potencial para ser expandida de forma segura.
Pegue o projeto completo aqui: c_AcessoBD_4.zip
Até o próximo artigo ...
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
.NET - Dicas de site com livros gratuitos para estudo - Macoratti.net