 C# 
- Criando um projeto de Acesso a Dados - 4
 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 dadosOleDbConnection 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‡Æocatch (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 excluirif (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 dadosOleDbConnection dbConnection = new OleDbConnection(strConnection); 
 //Cria o comando que inicia a instru‡Æo SQL para exclusÆoOleDbCommand 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‡Æocatch (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 Facebook
  
 Compartilhe no Twitter
 
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