WPF - Manutenção de dados com ADO .NET (C#)


Este é um artigo para iniciantes que desejam realizar operações com banco de dados em uma aplicação WPF.(Windows Presentation Foundation)

Vou mostrar como podemos realizar a manutenção de dados de um banco de dados SQL Server realizando as operações CRUD de forma bem simples.

Vamos iniciar abrindo o Visual C# 2010 Express Edition e criando um novo projeto do tipo WPF Application com o nome WPF_CRUD;

No menu File clique em New Project selecione o template WPF Application, informe o nome WP_CRUD e clique em OK;

Vamos criar um banco de dados SQL Server usando a janela DataBase Explorer;

Crie um banco de dados com o nome Teste.mdf e a seguir uma tabela chamada Candidatos com a seguinte estrutura:

   

A seguir abra o arquivo MainWindow.xaml e inclua os seguintes controles :

O leiaute da pagína MainWindow.xaml e vista a seguir:

O código XAML pode ser visto abaixo:

<Window x:Class="WPF_CRUD.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Resultado da Prova de Admissão" Height="424" Width="700" Loaded="Window_Loaded">
    <Grid>
        <Label Content="Código" Height="28" HorizontalAlignment="Left" Margin="37,307,0,0" Name="label1" VerticalAlignment="Top" Width="77" Visibility="Visible" />
        <Label Content="Nome" Height="28" HorizontalAlignment="Left" Margin="180,307,0,0" Name="label2" VerticalAlignment="Top" Width="49" Visibility="Visible" />
        <Label Content="Classificação" Height="28" HorizontalAlignment="Left" Margin="419,307,0,0" Name="label3" VerticalAlignment="Top" Width="94" Visibility="Visible" />
        <Button Content="Inserir" Height="23" HorizontalAlignment="Left" Margin="121,345,0,0" Name="btnInserir" VerticalAlignment="Top" Width="75" Click="btnInserir_Click" />
        <DataGrid AutoGenerateColumns="True" Height="265" HorizontalAlignment="Left" Margin="12,25,0,0" Name="macDataGrid" VerticalAlignment="Top" Width="654" />
        <Button Content="Atualizar" Height="23" HorizontalAlignment="Left" Margin="227,345,0,0" Name="btnAtualizar" VerticalAlignment="Top" Width="75" Click="btnAtualizar_Click" />
        <Button Content="Deletar" Height="23" HorizontalAlignment="Right" Margin="0,345,270,0" Name="btnDeletar" VerticalAlignment="Top" Width="75" Click="btnDeletar_Click" />
        <TextBox Height="23" HorizontalAlignment="Right" Margin="0,309,129,0" Name="txtClassificacao" VerticalAlignment="Top" Width="51" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="227,309,0,0" Name="txtNome" VerticalAlignment="Top" Width="181" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="120,309,0,0" Name="txtCodigo" VerticalAlignment="Top" Width="55" Background="#FFEFEF6A" />
       <Button Content="Valor Selecionado" HorizontalAlignment="Left" Margin="564,309,0,53" Name="btnPegarSelecao" Width="102" Click="btnPegarSelecao_Click" />
    </Grid>
</Window>

Vamos agora definir o código do arquivo MainWindow.xaml.cs

Inicie declarando os seguintes namespaces:

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

A seguir no início do arquivo defina a string de conexão usada para acessar o banco de dados SQL Server:

SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\dados\Teste.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")

Vamos definir a rotina VinculaDados() que deverá acessar a tabela candidatos e exibir o seu conteúdo no controle DataGrid - macDataGrid:

public void VinculaDados()
{
        try
        {
              conn.Open();
              SqlCommand comm = new SqlCommand("SELECT * FROM Candidatos", conn);
              DataSet ds = new DataSet();
              SqlDataAdapter da = new SqlDataAdapter(comm);
              da.Fill(ds);
              macDataGrid.ItemsSource = ds.Tables[0].DefaultView;
         }
          catch (Exception ex)
         {
             MessageBox.Show(ex.Message.ToString());
         }
         finally
         {
             conn.Close();
        }
}

Esta rotina será chamada no evento Window_Loaded()

private void Window_Loaded(object sender, RoutedEventArgs e)
 {
            VinculaDados();
 }

No evento Click do botão de comando Inserir temos o código que usa a instrução SQL Insert Into para incluir um novo registro na tabela Candidatos:

  private void btnInserir_Click(object sender, RoutedEventArgs e)
       {
           try
           {
               conn.Open();
               SqlCommand comm = new SqlCommand("INSERT INTO Candidatos VALUES('" + txtNome.Text + "'," + txtClassificacao.Text + ")", conn);
               comm.ExecuteNonQuery();
               limpaTexto();
           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.Message.ToString());
           }
           finally
           {
               conn.Close();
               VinculaDados();
           }
       }

O botão Atualizar possui o código abaixo no evento Click que usa instrução SQL Update/Set para atualizar os dados da tabela :

private void btnAtualizar_Click(object sender, RoutedEventArgs e)
       {

           try
           {
               conn.Open();
               SqlCommand comm = new SqlCommand("UPDATE Candidatos SET nome='" + txtNome.Text + "',classificacao=" + txtClassificacao.Text + "WHERE id=" + txtCodigo.Text + "", conn);
               comm.ExecuteNonQuery();
               limpaTexto();
           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.Message.ToString());
           }
           finally
           {
               conn.Close();
               VinculaDados();
           }
       }

Para deletar um registro temos o código a seguir no evento Click do botão Deletar, que usa a instrução SQL: Delete From :

private void btnDeletar_Click(object sender, RoutedEventArgs e)
       {
           if (string.IsNullOrEmpty(txtCodigo.Text))
           {
                MessageBox.Show("Informe um código para deletar !");
                return;
           }

           try
           {
               conn.Open();
               SqlCommand comm = new SqlCommand("DELETE FROM Candidatos WHERE id=" + txtCodigo.Text + "", conn);
               comm.ExecuteNonQuery();
               limpaTexto();
           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.Message.ToString());
           }
           finally
           {
               conn.Close();
               VinculaDados();
           }
       }

A rotina pegaLinhaSelecionada permite obter os valores de uma linha selecionada e preencher os controles TextBox com as informações:

public void pegaLinhaSelecionada()
       {
           string valor = null;
           try
           {
               System.Data.DataRowView drv = (System.Data.DataRowView)this.macDataGrid.SelectedItem;
               valor = drv[0].ToString();
           }
           catch
           {
               MessageBox.Show("Selecione uma linha para atualizar.");
               return;
           }

           if (string.IsNullOrWhiteSpace(valor))
           {
               MessageBox.Show("Selecione uma linha para atualizar.");
               return;
           }

           try
           {
               conn.Open();
               SqlCommand comm = new SqlCommand("SELECT * FROM Candidatos where id = " + valor, conn);
               DataTable dt = new DataTable();
               SqlDataAdapter da = new SqlDataAdapter(comm);
               da.Fill(dt);
               //pega os valores da tabela e exibe nos TextBox
               txtCodigo.Text = dt.Rows[0].Field<int>("id").ToString();
               txtNome.Text = dt.Rows[0].Field<string>("nome");
               txtClassificacao.Text = dt.Rows[0].Field<string>("classificacao");
           }
           catch (Exception ex)
           {
               MessageBox.Show(ex.Message.ToString());
           }
           finally
           {
               conn.Close();
           }
       }

Finalmente a rotina limpa_Texto() limpa os controle TextBox usados:

 public void limpaTexto()
       {
           txtCodigo.Clear();
           txtNome.Clear();
           txtClassificacao.Clear();
       }

Abaixo vemos o projeto em execução:

O projeto é bem simples e mostra uma das maneiras de realizarmos as operações de acesso e edição de dados em um banco de dados SQL Server usando ADO .NET.

Não se iluda. Embora o projeto funcione corretamente ele pode e deve ser melhorado nos seguintes aspectos:

Pegue o projeto completo aqui: WPF_CRUD.zip

Mat 22:36 Mestre, qual é o grande mandamento na lei?

Mat 22:37 Respondeu-lhe Jesus: Amarás ao Senhor teu Deus de todo o teu coração, de toda a tua alma, e de todo o teu entendimento.

Mat 22:38 Este é o grande e primeiro mandamento.

Mat 22:39 E o segundo, semelhante a este, é: Amarás ao teu próximo como a ti mesmo.

Mat 22:40 Destes dois mandamentos dependem toda a lei e os profetas.

Referências:


José Carlos Macoratti