C# - PostGreSQL - CRUD Básico - II
Na primeira parte deste artigo apresentamos o PostGreSQL e a ferramenta de administração pgAdmin III e criamos o banco de dados cadastro e a tabela funcionarios.
Vamos agora criar uma aplicação do tipo Windows Forms usando a linguagem C#.
Abra o Visual C# 2010 Express Edition e no menu File clique em New Project e selecione o template Windows Forms Application informando o nome PostgreSQL_CRUD;
A seguir no formulário form1.cs vamos incluir os seguintes controles:
Conforme o leiaute da figura abaixo:
Vamos referenciar o .Net Data Provider Npgsql em nosso projeto.
No menu Project clique em Add Reference;
A seguir clique na guia Browse e localize a pasta onde você descompactou os arquivos do Npgsql;
Selecione os arquivos Npgsql.dll e Mono.Security.dll e clique no botão OK;
Criando a camada de Acesso a dados - DAL
Vamos criar uma classe no projeto onde iremos definir a nossa camada de acesso a dados.
No menu Project clique em Add Class e informe o nome DAL.cs;
A seguir vamos declarar os seguintes namespaces na classe:
using
System; using System.Data; using Npgsql; |
No início da classe vamos declarar as variáveis que definem a conexão com o banco de dados
static
string serverName = "127.0.0.1";
//localhost static string port = "5432"; //porta default static string userName = "postgres"; //nome do administrador static string password = "sua_senha"; //senha do administrador static string databaseName = "Cadastro"; //nome do banco de dados NpgsqlConnection pgsqlConnection = null; string connString = null; |
No construtor da classe vamos definir a string de conexão conforme o código a seguir:
public
DAL() { connString = String.Format("Server={0};Port={1};User Id={2};Password={3};Database={4};", serverName, port, userName, password, databaseName); } |
Vamos agora definir os seguintes métodos na classe DAL:
Nesses métodos iremos basicamente fazer o seguinte:
1- Método GetTodosRegistros()
//Pega todos os registros public DataTable GetTodosRegistros() { DataTable dt = new DataTable(); try { using (pgsqlConnection = new NpgsqlConnection(connString)) { // abre a conexão com o PgSQL e define a instrução SQL pgsqlConnection.Open(); string cmdSeleciona = "Select * from funcionarios order by id"; using (NpgsqlDataAdapter Adpt = new NpgsqlDataAdapter(cmdSeleciona, pgsqlConnection)) { Adpt.Fill(dt); } } } catch (NpgsqlException ex) { throw ex; } catch (Exception ex) { throw ex; } finally { pgsqlConnection.Close(); } return dt; } |
Este método obtém todos os registros da tabela funcionarios e retorna um objeto DataTable();
2- Método GetRegistroPorId()
//Pega um registro pelo codigo public DataTable GetRegistroPorId(int id) { DataTable dt = new DataTable(); try { using (NpgsqlConnection pgsqlConnection = new NpgsqlConnection(connString)) { //Abra a conexão com o PgSQL pgsqlConnection.Open(); string cmdSeleciona = "Select * from funcionarios Where id = " + id; using (NpgsqlDataAdapter Adpt = new NpgsqlDataAdapter(cmdSeleciona, pgsqlConnection)) { Adpt.Fill(dt); } } } catch (NpgsqlException ex) { throw ex; } catch (Exception ex) { throw ex; } finally { pgsqlConnection.Close(); } return dt; } |
Neste método obtemos um registro da tabela funcionarios cujo id for igual ao argumento passado ao método.
3- Método InserirRegistros()
//Inserir registros public void InserirRegistros(string nome,string email, int idade) { try { using (NpgsqlConnection pgsqlConnection = new NpgsqlConnection(connString)) { //Abra a conexão com o PgSQL pgsqlConnection.Open(); string cmdInserir = String.Format("Insert Into funcionarios(nome,email,idade) values('{0}','{1}',{2})",nome,email,idade); using (NpgsqlCommand pgsqlcommand = new NpgsqlCommand(cmdInserir, pgsqlConnection)) { pgsqlcommand.ExecuteNonQuery(); } } } catch (NpgsqlException ex) { throw ex; } catch (Exception ex) { throw ex; } finally { pgsqlConnection.Close(); } } |
Este método inclui registros na tabela funcionarios.
4- Método AtualizarRegistro()
//Atualiza registros public void AtualizarRegistro(int codigo, string email, int idade) { try { using (NpgsqlConnection pgsqlConnection = new NpgsqlConnection(connString)) { //Abra a conexão com o PgSQL pgsqlConnection.Open(); string cmdAtualiza = String.Format("Update funcionarios Set email = '" + email + "' , idade = " + idade + " Where id = " + codigo); using (NpgsqlCommand pgsqlcommand = new NpgsqlCommand(cmdAtualiza, pgsqlConnection)) { pgsqlcommand.ExecuteNonQuery(); } } } catch (NpgsqlException ex) { throw ex; } catch (Exception ex) { throw ex; } finally { pgsqlConnection.Close(); } } |
Este método atualiza os campos email e idade de um registro da tabela.
5- Método DeletarRegistro()
//Deleta registros public void DeletarRegistro(string nome) { try { using (NpgsqlConnection pgsqlConnection = new NpgsqlConnection(connString)) { //abre a conexao pgsqlConnection.Open(); string cmdDeletar = String.Format("Delete From funcionarios Where nome = '{0}'",nome); using (NpgsqlCommand pgsqlcommand = new NpgsqlCommand(cmdDeletar, pgsqlConnection)) { pgsqlcommand.ExecuteNonQuery(); } } } catch (NpgsqlException ex) { throw ex; } catch (Exception ex) { throw ex; } finally { pgsqlConnection.Close(); } } |
Neste método excluímos um registro pelo nome do funcionário.
Em todos os métodos definidos estamos usando um bloco try/catch/finally onde capturamos as exceções lançadas no bloco catch e sempre fechamos a conexão no bloco Finally.
O método usado neste exemplo usa comandos SQL inline o que não é muito recomendado por ser passível de sofrer injeção SQL além de ser mais propenso a erros de digitação para instruções SQL mais complexas.
Na última parte do artigo vamos definir a interface com o usuário para realizar as operações na tabela funcionarios usando a camada de acesso a dados criada neste artigo: C# - PostGreSQL - CRUD Básico - III
Mat 22:29
Jesus, porém, lhes respondeu: Errais, não compreendendo as Escrituras nem o poder de Deus;Mat 22:30
pois na ressurreição nem se casam nem se dão em casamento; mas serão como os anjos no céu.Mat 22:31
E, quanto à ressurreição dos mortos, não lestes o que foi dito por Deus:Mat 22:32
Eu sou o Deus de Abraão, o Deus de Isaque, e o Deus de Jacó? Ora, ele não é Deus de mortos, mas de vivos.Referências: