Desenvolvimento

12 ago, 2016

.NET – Convertendo uma fonte de dados MS Access para PostgreSQL

Publicidade

No artigo de hoje vou mostrar como converter uma fonte de dados MS Access para PostgreSQL e acessar os dados usando a plataforma .NET.

Você já precisou converter uma fonte de dados do MS Access para PostgreSQL? Procurando no Google você vai encontrar muitas ferramentas que se propõe a realizar essa tarefa.

Nota: No site do PostgreSQL existe um link para uma ferramenta que faz isso: https://dbconvert.com/access/postgresql/ mas ela não é grátis.

No site da empresa Bullzip existe uma ferramenta gratuita chamada Access to PostgreSQL, que faz a conversão. É sobre essa ferramenta que o artigo vai tratar.

Para poder usar a ferramenta e enviar as tabelas do MS Access diretamente para o PostgreSQL, você vai precisar baixar um driver ODBC para o PostgreSQL neste link – não é preciso configurar uma conexão ODBC o programa faz isso para você.

Convertendo MS Access para PostgreSQL

Então, após baixar e instalar o driver ODBC e a ferramenta, a conversão é uma tarefa bem simples.

Vou mostrar o passo a passo da conversão do banco de dados Northwind.mdb para PostgreSQL:

1. A tela inicial do programa:

net_mspgsql11

2. O formulário para informar a fonte de dados MS Access a ser convertida:

net_mspgsql12

3. O formulário para definir o modo de acesso e informar os dados da conexão com o PostgreSQL e o nome de destino:

net_mspgsql13

4. O formulário onde podemos selecionar as tabelas que serão convertidas:

net_mspgsql14

5. O formulário com as opções de transferência:

net_mspgsql15

6. O formulário informando o progresso da conversão e ao final mostrando o resultado da conversão:

net_mspgsql16

Abrindo o pgAdmin III, podemos verificar a existência do schema Northwind_pgsql, que foi gerado pela ferramenta como conversão do banco de dadosNorthwind.mdb.

net_mspgsql17

Agora para mostrar que os dados existem e que podemos acessá-los usando o PostgreSQL, vou criar um exemplo usando a linguagem VB .NET e também C#.

Nota: Para saber mais sobre as strings de conexão usadas para o PostgreSQL veja esse link: https://www.connectionstrings.com/postgresql/

Recursos usados

Conectando com o banco de dados Northwind_pgsql

Acessar um banco de dados PostegreSQL na plataforma .NET é muito simples. Vou criar uma solução com dois projetos: um projeto VB .NET e outro C#, para acessar o banco de dados que convertemos.

Abra o VS Community 2015  e clique em New Project e, a seguir, selecione Other Project Types e clique em Visual Studio Solutions. Depois selecione Blank Solution e informe o nome Acessando_PostgreSQL e clique em OK.

net_mspgsql18

Agora vamos incluir dois projetos nesta solução.

No menu File, clique em New Project. Depois selecione a linguagem Visual C# e o template Windows Forms Application e informe o nome PostgreSQL_CSharp e clique em OK.

net_mspgsql19

Repetindo o procedimento acima, selecione a linguagem Visual Basic e o template Windows Forms Application e informe o nome PostgreSQL_VBNET e clique em OK.

net_mspgsql1a

Agora vamos incluir a referência ao conector PostgreSQL via Nuget em ambos os projetos da solução. Vou usar o Npgsql.

No menu Tools, clique em Nuget Package Manager e, a seguir, em Manage Nuget Packages for Solution;

Selecione o pacote Npgsql e clique em Install para os dois projetos da solução:

net_mspgsql1b

Agora temos tudo pronto para acessar o banco de dados Northwind_pgsql.

Vou abrir o projeto VB .NET e definir uma interface de usuário bem simples onde iremos ter os seguintes controles:

  • 1 DataGridView – dgvDados
  • 1 Combobox – cboTabelas
  • 1 Button – btnExecutar

O leiaute do formulário deverá ficar assim:

net_mspgsql1c

Neste momento, vamos definir o código do evento Click do botão de comando para acessar o banco de dados e a tabela informada exibindo os dados no controle DataGridView:

Imports System.Data
Imports Npgsql
Public Class form1
    Shared serverName As String = "127.0.0.1"
    Shared port As String = "5432"
    Shared userName As String = "postgres"
    Shared password As String = "sua_senha"
    Shared databaseName As String = "Northwind_pgsql"
    Private pgsqlConnection As NpgsqlConnection = Nothing
    Private connString As String = Nothing
    Private Sub btnExecutar_Click(sender As Object, e As EventArgs) Handles btnExecutar.Click
        Dim ConexaoPG As String = String.Format("Server={0};Port={1};User Id={2};Password={3};Database={4};", 
serverName, port, userName, password, databaseName)
        Dim conn As NpgsqlConnection = Nothing
        Try
            'Instancia NpgsqlConnection na variavel conn
            conn = New NpgsqlConnection(ConexaoPG)
            'Abre a conexão
            conn.Open()
            'Declara e atribui a instrucao SQL de consulta
            Dim SQL As String = "SELECT * FROM public." & cboTabelas.Text
            'Instancia o NpgsqlDataAdapter responsavel pela comunicação
            'é feita a leitura dos dados preenchendo o dataset
            Dim da As Npgsql.NpgsqlDataAdapter = New NpgsqlDataAdapter(SQL, conn)
            'Instancia um DataSet
            Dim ds As DataSet = New DataSet()
            'Preenche o DataAdapter
            da.Fill(ds, cboTabelas.Text)
            'Atribui um Datasource a Grid
            dgvDados.DataSource = ds.Tables(0).DefaultView
        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            If Not conn Is Nothing Then
                If conn.State = ConnectionState.Open Then
                    conn.Close()
                End If
            End If
        End Try
    End Sub
    Private Sub form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        cboTabelas.SelectedIndex = 0
    End Sub
End Class

O código CSharp é visto a seguir:

using System;
using System.Data;
using System.Windows.Forms;
using Npgsql;
namespace PostgreSQL_CSharp
{
    public partial class Form1 : Form
    {
        static string serverName = "127.0.0.1";
        static string port = "5432";
        static string userName = "postgres";
        static string password = "sua_senha";
        static string databaseName = "Northwind_pgsql";
        public Form1()
        {
            InitializeComponent();
        }
        private void btnExecutar_Click(object sender, EventArgs e)
        {
            string ConexaoPG = string.Format("Server={0};Port={1};User Id={2};Password={3};Database={4};", 
serverName, port, userName, password, databaseName);
            NpgsqlConnection conn = null;
            try
            {
                //Instancia NpgsqlConnection na variavel conn
                conn = new NpgsqlConnection(ConexaoPG);
                //Abre a conexão
                conn.Open();
                //Declara e atribui a instrucao SQL de consulta
                string SQL = "SELECT * FROM public." + cboTabelas.Text;
                //Instancia o NpgsqlDataAdapter responsavel pela comunicação
                //é feita a leitura dos dados preenchendo o dataset
                Npgsql.NpgsqlDataAdapter da = new NpgsqlDataAdapter(SQL, conn);
                //Instancia um DataSet
                DataSet ds = new DataSet();
                //Preenche o DataAdapter
                da.Fill(ds, cboTabelas.Text);
                //Atribui um Datasource a Grid
                dgvDados.DataSource = ds.Tables[0].DefaultView;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                if ((conn != null))
                {
                    if (conn.State == ConnectionState.Open)
                    {
                        conn.Close();
                    }
                }
            }
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            cboTabelas.SelectedIndex = 0;
        }
    }
}

Executando o projeto e selecionando uma tabela, iremos obter os dados exibidos no controle datagridview.

Nota: Se você obter a mensagem de erro:  “relation <tablename> does not exist.”, verifique as permissões e privilégios do usuário que esta acessando a tabela.

Pegue o projeto completo aqui: Acessando_PostgreSQL.zip