Pergunta

Estou pensando em trabalhar em um projeto que usa C # .NET (em uma caixa do Windows) como linguagem principal e PostgreSQL como banco de dados de back-end (o back-end está em uma caixa do Linux).Ouvi dizer que o ODBC.NET permite fácil integração desses dois componentes.

Alguém já teve experiência em configurar C# e PostgreSQL para trabalharem juntos?Em caso afirmativo, você tem alguma sugestão sobre como fazer isso, problemas que encontrou, etc.?

Foi útil?

Solução

Estou trabalhando com C# e Postgres usando Npgsql2 componente, e eles funcionam rápido, eu recomendo você.

Você pode baixar de https://github.com/npgsql/Npgsql/releases

Observação: Se você deseja uma aplicação que funcione com qualquer banco de dados você pode usar o DbProviderFactory class e faça suas consultas usando Conexão IDb, IDbCommand, IDataReader e/ou IDbTransação interfaces.

Outras dicas

Npgsql - .Net Provider for PostGreSQL - é um excelente driver.Se você usou o framework ADO.NET mais tradicional, você está realmente com sorte aqui.Eu tenho um código que se conecta ao Oracle que parece quase idêntico às conexões do PostGreSQL.Mais fácil de fazer a transição do Oracle e reutilizar células cerebrais.

Ele suporta todas as coisas padrão que você gostaria de fazer ao chamar SQL, mas também suporta chamar Funções (procedimentos armazenados).Isto inclui o retorno de cursores de referência.A documentação é bem escrita e fornece exemplos úteis sem ser filosófico ou misterioso.Roube o código da documentação e ele funcionará instantaneamente.

Francisco Figueiredo Jr e equipe fizeram um ótimo trabalho nisso.
Já está disponível em GitHub.
https://github.com/franciscojunior/Npgsql2

O melhor site para informações é:http://npgsql.projects.postgresql.org/

Leia a documentação!http://npgsql.projects.postgresql.org/docs/manual/UserManual.html

Existe um provedor Linq para PostgreSQL em https://www.nuget.org/packages/linq2db.PostgreSQL/.

Desenvolvemos vários aplicativos usando o visual studio 2005 com o provedor de dados devart ado.net para PostgreSql (http://www.devart.com/pgsqlnet/).

Uma das vantagens deste provedor é que ele oferece suporte completo ao Visual Studio.As versões mais recentes incluem todos os novos recursos do framework, como linq.

Hoje, a maioria das linguagens/plataformas (Java, .NET, PHP, Perl etc.) podem funcionar com quase qualquer SGBD (SQL Server, Firebird, MySQL, Oracle, PostgresSQL etc.), então não me preocuparia nem por um segundo.Claro que pode haver falhas e pequenos problemas, mas nenhum obstáculo.

Como sugeriu jalcom, você deve programar em um conjunto de interfaces ou pelo menos em um conjunto de classes base (DbConnection, DbCommand e assim por diante) para ter um aplicativo facilmente adaptável.

Você não deveria ter muitos problemas.Como outros mencionaram, existem muitos provedores de dados .Net PostgreSQL disponíveis.Uma coisa que você pode querer observar é que recursos como o Linq provavelmente não poderão ser usados.

Não deixe que a falta de suporte do Linq o impeça.Um padrão que uso é sempre retornar meus dados em listas e depois fazer o linq.Comecei a fazer isso religiosamente quando descobri que a mesma expressão Linq (reconhecidamente obscura) no MySQL não trazia de volta os mesmos dados que no Sql Server.

Basta ir para Ferramenta -> Gerenciador de Pacotes NuGet -> Gerenciador Gerenciador de Pacotes Nuget

procurar NpgSql e selecione seu projeto e clique em Instalar

Código de amostra

public void Demo()
        {
            NpgsqlConnection connection = new NpgsqlConnection();
            connection = d_connection; // your connection string
            connection.Open();              
            NpgsqlCommand cmd = new NpgsqlCommand();
            try
            {
                cmd.Connection = connection;
                cmd.CommandText = "select * from your table name";
                cmd.CommandType = System.Data.CommandType.Text;
                using (var dataReader = cmd.ExecuteReader())
                {
                    while (dataReader.Read())
                    {

                     string answer= dataReader.IsDBNull(0) ? "" : dataReader.GetString(0);

                    }
                    dataReader.Dispose();
                }
            }
            catch (Exception e)
            {
            }
            finally
            {
                cmd.Dispose();
                connection.Dispose();
            }            
        }

Não use letras maiúsculas no postgreSql porque diferencia maiúsculas de minúsculas.

Npgsql é um driver excelente, mas o único problema que encontrei até agora é que o valor numérico não cabe em um System.Decimal, portanto, a única opção é correta em cada consulta ou esquema de banco de dados

https://github.com/npgsql/Npgsql.EntityFrameworkCore.PostgreSQL/issues/438#issuecomment-486586272

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top