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: