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
É 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/.