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:
2. O formulário para informar a fonte de dados MS Access a ser convertida:
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:
4. O formulário onde podemos selecionar as tabelas que serão convertidas:
5. O formulário com as opções de transferência:
6. O formulário informando o progresso da conversão e ao final mostrando o resultado da conversão:
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.
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.
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.
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.
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:
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:
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