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:


José Carlos Macoratti