Desenvolvimento - C#

Acessando o PostgreSQL com Visual C#.NET

Este artigo dedica-se a apresentar uma forma simples de utilização do ODBC Data Provider para conectar-se à um banco de dados PostgreSQL usando o Visual C#.NET (ou outra linguagem portada para o Microsoft.NET Framework).

por Carlos de Mattos



Conectividade para bancos de dados no Microsoft.NET

O Microsoft.NET CLR (Common Language Runtime) oferece várias opções de conexão para os mais diversos bancos de dados. Este artigo dedica-se a apresentar uma forma simples de utilização do ODBC Data Provider para conectar-se à um banco de dados PostgreSQL usando o Visual C#.NET (ou outra linguagem portada para o Microsoft.NET Framework.

ODBC Driver para PostgreSQL

O primeiro passo é verificar se você já possui o driver ODBC para PostgreSQL. Você pode verificar a existência deste driver através da janela ODBC Data Source Administrator (Figura 1) que pode ser acessada através do Painel de Controle à Ferramentas Administrativas à Data Sources (ODBC).


Figura 1: ODBC Data Sources

Caso você não possua esse driver instalado em seu computador, antes de prosseguir, você deverá realizar a instalação utilizando o arquivo [psqlodbc.msi] contido no pacote disponível para download deste artigo. É importante esclarecer que para obter os drivers atualizados e para versões específicas do PostgreSQL o desenvolvedor deverá acessar o website http://gborg.postgresql.org/project/psqlodbc/genpage.php?downloads. O arquivo que acompanha este artigo é compatível com a versão 7.03.02.00 e foi utilizado apenas para ilustrar os procedimentos apresentados.

Instalando o driver ODBC para PostgreSQL

Execute o arquivo [psqlodbc.msi] e siga os passos do assitente apresentado na Figura 2. O assistente para instalação do psqlODBC é bastante simples e a instalação é rápida.


Figura 2: O Assistente para instalação do driver ODBC para PostgreSQL.

Após concluir este procedimento, você precisará criar o arquivo DSN de usuário. Para isto, abra novamente a janela ODBC Data Source Administrator, selecione a guia User DSN e clique no botão [Add...], será exibida a janela Create New Datasource (Figura 3), selecione o driver PostgreSQL desejado e clique no botão [Finish].


Figura 3: Janela Create New Data Source

Após clicar no botão [Finish] o sistema exibirá outro diálogo, a janela PostgreSQL ODBC Driver Setup (Figura 4). Nesta janela o desenvolvedor deverá informar os dados básicos para conexão com seu banco de dados e uma descrição que será utilizada para referirmos à fonte de dados no código da aplicação. Configurações mais avançadas podem ser definidas através do botão [Datasource].


Figura 4: A janela PostgreSQL ODBC Driver Setup Neste ponto, o desenvolvedor já poderá escrever aplicações com o Visual C#.NET (ou qualquer outra linguagem portada para o Microsoft.NET Framework) para acessar suas bases PostgreSQL. O ODBC.NET Provider que acompanha o Visual Studio.NET oferece um conjunto de classes como OdbcConnection, OdbcCommand e OdbcDataReader; que provêem as funcionalidades necessárias para você comunicar-se com seu servidor PostgreSQL e administrar suas bases de dados. Um bom conhecimento sobre os objetos do ADO.NET será fundamental para que o desenvolvedor possa implementar suas aplicações.

Implementando o código da aplicação Para ilustar este exemplo, será necessário a criação de uma tabela que será acessada pela nossa aplicação. O script necessário para criação desta tabela e alimentação de alguns registros iniciais é apresentado na Listagem 1.

CREATE TABLE TesteCSharp
(
ID serial,
Texto text,
Acessado timestamp
); 

INSERT INTO TesteCSharp(Texto, Acessado) VALUES("Exemplo 1", now()); 
INSERT INTO TesteCSharp(Texto, Acessado) VALUES("Exemplo 2", now()); 
INSERT INTO TesteCSharp(Texto, Acessado) VALUES("Exemplo 3", now()); 
INSERT INTO TesteCSharp(Texto, Acessado) VALUES("Exemplo 4", now()); 
INSERT INTO TesteCSharp(Texto, Acessado) VALUES("Exemplo 5", now()); 

Listagem 1: A tabela TesteCSharp

Abaixo, você encontrará a Listagem 2 que apresenta a classe PostgreSQL_Sample implementada com Visual C#.NET que demonstra como estabelecer uma conexão com seu servidor PostgreSQL. Observe o código.

using System;
using System.Data;
using Microsoft.Data.Odbc;

class PostgreSQL_Sample
{

  [STAThread]
  static void Main(string[] args)
  {

    // string de conexão
    string cnString = "DSN=dsnPostgreSQL;UID=cmattos;PWD=***;";

    // cria o objeto OdbcConnection
    OdbcConnection cnPostgreSQL = new OdbcConnection(cnString);
     
    // O código a seguir demonstra como capturer e reporter uma ODBC exception.
    // Para manter a simplicidade, este será o único tratamento de Exception neste exemplo.
    
try 
    {
      cnPostgreSQL.Open();
    } 
catch (OdbcException ex) 
    {
      Console.WriteLine (ex.Message + "\n\n" + "StackTrace: \n\n" + ex.StackTrace);
      // Pausa para o usuário ler a mensagem
      Console.WriteLine("\n Pressione qualquer tecla para continuar...");
      Console.Read();
      return;
    }
    
    // Cria o objeto DataSet
    DataSet ds = new DataSet(); 
    OdbcDataAdapter da = new OdbcDataAdapter();
    OdbcCommandBuilder cb = new OdbcCommandBuilder(da);
    da.SelectCommand = new OdbcCommand("SELECT ID, Texto, Acessado FROM TesteCSharp", cnPostgreSQL);
    da.Fill(ds);

    // Exibe o número de registros da tabela
    Console.WriteLine("A Tabela [TesteCSharp] contém {0} registros.\n", ds.Tables[0].Rows.Count);
    
    // Exibe os nomes das colunas da tabela
    Console.WriteLine("Colunas\n=======\n");
    
    foreach(DataColumn dc in ds.Tables[0].Columns)
    {
    	Console.WriteLine("{0} ({1})", dc.ColumnName, dc.DataType);
    	Console.WriteLine("\n");
    }

    cnPostgreSQL.close();
}

Listagem 2: A classe PostgreSQL_Sample

.NET Data Provider for PostgreSQL

Um informação muito importante para o desenvolvedor é que já encontra-se em desenvolvimento o .NET Data Provider for PostgreSQL. Informações detalhadas sobre o Npgsql (como foi batizado) podem ser obtidas no endereço http://gborg.postgresql.org/project/npgsql/projdisplay.php, contudo, o site informa que ainda não há uma versão estável pronta para distribuição. O desenvolvedor que utiliza o PostgreSQL deve ficar atento para a liberação desta ferramenta.

PostgreSQLDirect.NET Data Provider

Outra alternativa, para os desenvolvedores que estão dispostos a desembolsar alguns dólares, é o PostgreSQLDirect.NET Data Provider fornecido pela empresa CoreLab Software Development. Este componente oferece vários recursos para o acesso e administração de bases de dados PostgreSQL (ver Figura 5). A CoreLab também oferece Data Providers customizados para bases de dados SQL Server, Oracle, MySQL e DB2. Visite o website da empresa em http://www.crlab.com/ para obter maiores informações sobre os produtos. Informações mais detalhadas sobre o PostgreSQLDirect.NET Data Provider podem ser encontradas no endereço http://www.crlab.com/pgsqlnet/.


Figura 5: Ferramentas do PostgreSQL Direct.NET

Mais informações sobre o PostgreSQL podem ser obtidas através do website http://www.postgresql.org/.

Carlos de Mattos

Carlos de Mattos - É profissional certificado pela Microsoft desde 1998. Atua como desenvolvedor de soluções customizadas para o mercado corporativo há mais de 10 anos. Foi premiado pela Microsoft como MVP em 2003 e 2004. Tem diversos artigos publicados nas revistas FórumAccess e MSDN Magazine, nos Websites MSDN Online Brasil, Portal DevMedia/MSDN e Linha de Código. Carlos também atuou durante 5 anos junto à Comunidade Acadêmica na região de Sorocaba/SP ministrando palestras e treinamentos junto às Universidades e Colégios Técnicos. Atualmente está em Sorocaba/SP, na WD5 Solutions dedicando-se à implementação de soluções baseadas em tecnologia Microsoft.NET.