C# - CRUD com FireBird 2.5.1 - II


Na primeira parte do artigo eu criei o banco de dados Cadastro.fdb e a tabela Clientes no FireBird.

Vamos agora criar um projeto onde iremos gerenciar as informações da tabela Clientes realizando as operações CRUD (Create, Read, Update, Delete).

Vou usar o Visual C# 2010 Express Edition e criar um projeto do tipo Windows Forms Application onde definiremos uma interface com o usuário.

Criando o projeto C#

Abra o Visual C# 2010 Express Edition e no menu File clique em New Project;

A seguir selecione o template Windows Forms Application informando o nome CRUD_FIreBird;

No formulário form1.cs vamos incluir, a partir da ToolBox, os controles GroupBox, Label, TextBox, Button e DataGridView conforme o leiaute da figura abaixo:

Controles TextBox:
  • txtID
  • txtNome
  • txtEndereco
  • txtTelefone
  • txtEmail

Controle Button:

  • btnProcurar
  • btnNovo
  • btnAlterar
  • btnExclui
  • btnLimpa
  • btnSair

Controle DataGridView

  • dgvCientes

Criando a classe de acesso a dados

Vamos incluir uma referência ao provedor FireBird .NET Provider 2.7.7 em nosso projeto via menu Project opção Add reference;

Selecionando a guia Browse e localizando o local onde instalamos o provedor:

Vamos também incluir uma referência a System.Configuration ao projeto via menu Project opção Add reference;

Selecionando guia .NET e escolhendo a opção System.Configuration;

Finalmente vamos incluir um arquivo App.Config no projeto via menu Project opção Add New Item;

]

Após incluir o arquivo inclua o código abaixo onde definimos a string de conexão com o banco de dados Cadastro.fdb:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="FireBirdConnectionString"
     connectionString="Server=localhost;User=SYSDBA;Password=masterkey;Database=c:\dados\cadastro.fbd" />
  </connectionStrings>
</configuration>

Para tornar nossa aplicação mais fácil de manter vamos separar as responsabilidades criando uma classe onde iremos definir os métodos de acesso e persistência de dados na tabela Clientes;

No menu Project clique em Add Class e informe o nome AcessoFB;

A seguir digite o código abaixo nesta classe:

using System;
using FirebirdSql.Data.FirebirdClient;
using System.Configuration;
using System.Data;

namespace CRUD_FireBird
{
    public class AcessoFB
    {
        private static readonly AcessoFB instanciaFireBird = new AcessoFB();
        private AcessoFB() { }

        public static AcessoFB getInstancia()
        {
            return instanciaFireBird;
        }

        public FbConnection getConexao()
        {
            string conn = ConfigurationManager.ConnectionStrings["FireBirdConnectionString"].ToString();
            return new FbConnection(conn);
        }

        public static DataTable fb_GetDados()
        {
            using (FbConnection conexaoFireBird = AcessoFB.getInstancia().getConexao())
            {
                try
                {
                    conexaoFireBird.Open();
                    string mSQL = "Select * from Clientes";
                    FbCommand cmd = new FbCommand(mSQL, conexaoFireBird);
                    FbDataAdapter da = new FbDataAdapter(cmd);
                    DataTable dt = new DataTable();
                    da.Fill(dt);
                    return dt;
                }
                catch (FbException fbex)
                {
                    throw fbex;
                }
                finally
                {
                    conexaoFireBird.Close();
                }
            }
        }

        public static void fb_InserirDados(Cliente cliente)
        {
            using (FbConnection conexaoFireBird = AcessoFB.getInstancia().getConexao())
            {
                try
                {
                    conexaoFireBird.Open();
                    string mSQL =  "INSERT into Clientes Values(" + cliente.ID + ",'" + cliente.Nome + "','" + cliente.Endereco + "','" +
 cliente.Telefone + "','" + cliente.Email + "')";

                    FbCommand cmd = new FbCommand(mSQL, conexaoFireBird);
                    cmd.ExecuteNonQuery();
                }
                catch (FbException fbex)
                {
                    throw fbex;
                }
                finally
                {
                    conexaoFireBird.Close();
                }
            }
        }
        public static void fb_ExcluirDados(int id)
        {
            using (FbConnection conexaoFireBird = AcessoFB.getInstancia().getConexao())
            {
                try
                {
                    conexaoFireBird.Open();
                    string mSQL = "DELETE from Clientes Where id= " + id;
                    FbCommand cmd = new FbCommand(mSQL, conexaoFireBird);
                    cmd.ExecuteNonQuery();
                }
                catch (FbException fbex)
                {
                    throw fbex;
                }
                finally
                {
                    conexaoFireBird.Close();
                }
            }
        }

        public static Cliente fb_ProcuraDados(int id)
        {
            using (FbConnection conexaoFireBird = AcessoFB.getInstancia().getConexao())
            {
                try
                {
                    conexaoFireBird.Open();
                    string mSQL = "Select * from Clientes Where id = " + id ;
                    FbCommand cmd = new FbCommand(mSQL, conexaoFireBird);
                    FbDataReader dr = cmd.ExecuteReader();
                    Cliente cliente = new Cliente();
                    while (dr.Read())
                    {
                        cliente.ID = Convert.ToInt32(dr[0]);
                        cliente.Nome = dr[1].ToString();
                        cliente.Endereco = dr[2].ToString();
                        cliente.Telefone = dr[3].ToString();
                        cliente.Email = dr[4].ToString();
                    }
                    return cliente;
                }
                catch (FbException fbex)
                {
                    throw fbex;
                }
                finally
                {
                    conexaoFireBird.Close();
                }
            }
        }
        public static void fb_AlterarDados(Cliente cliente)
        {
            using (FbConnection conexaoFireBird = AcessoFB.getInstancia().getConexao())
            {
                try
                {
                    conexaoFireBird.Open();
                    string mSQL = "Update Clientes set nome= '" + cliente.Nome + "', endereco= '" + cliente.Endereco + 
                                           "', telefone = '" + cliente.Telefone + "', email= '" + cliente.Email + "'" + " Where id= " + cliente.ID;
                    FbCommand cmd = new FbCommand(mSQL, conexaoFireBird);
                    cmd.ExecuteNonQuery();
                }
                catch (FbException fbex)
                {
                    throw fbex;
                }
                finally
                {
                    conexaoFireBird.Close();
                }
            }
        }
    }
}

Nesta classe definimos temos o construtor da classe é marcado como private e desta forma se tentarmos usar o operador new com essa classe teremos um erro;

Somente a própria classe terá acesso a este método e é o que ela faz na linha de código :

private static readonly AcessoFB instanciaFireBird = new AcessoFB();

usando o operador new.

O atributo instanciaFireBird é obtido via método getInstancia que é do tipo da classe; Este método retornará sempre o mesmo objeto.

Temos também a definição dos seguintes métodos:

Dessa forma temos uma classe que representa uma camada de acesso aos dados onde tratamos o acesso e a persistência aos dados. Qualquer alteração ou inclusão de nova funcionalidade relativa aos dados será tratada nesta classe.

Por último vamos incluir outra classe ao projeto via menu Project opção Add Class com o nome Cliente.cs onde estaremos definindo o nosso domínio referente


namespace CRUD_FireBird
{
    public class Cliente
    {
        public int ID { get; set; }
        public string Nome { get; set; }
        public string Endereco { get; set; }
        public string Telefone { get; set; }
        public string Email { get; set; }
    }
}

Esta classe servirá basicamente como um DTO (Data Transfer Object) onde iremos repassar as informações entre a camada de interface e a camada de acesso aos dados.

Acompanhe a terceira parte do artigo: CRUD com FireBird 2.5.1 - III

Joã 3:34 Pois aquele que Deus enviou fala as palavras de Deus; porque Deus não dá o Espírito por medida.
Joã 3:35
O Pai ama ao Filho, e todas as coisas entregou nas suas mãos.
Joã 3:36
Quem crê no Filho tem a vida eterna; o que, porém, desobedece ao Filho não verá a vida, mas sobre ele permanece a ira de Deus.

Referências:


José Carlos Macoratti