C#.NET + PostgreSQL


Я смотрю на работу над проектом, который использует C#.NET (сидя на коробке windows) в качестве основного языка и PostgreSQL в качестве бэкэнд-базы данных (бэкэнд сидит на коробке linux). Я слышал, что ODBC.NET позволяет легко интегрировать эти два компонента.

У кого-нибудь был опыт настройки C# и PostgreSQL для совместной работы? Если да, то есть ли у вас какие-либо предложения о том, как это сделать, проблемы, которые вы нашли и т. д.?

8   51  

8 ответов:

Я работаю с C# и Postgres с помощью Npgsql2 компонент, и они работают быстро, я рекомендую вам.

вы можете скачать с https://github.com/npgsql/Npgsql/releases

Примечание: Если вы хотите приложение, которое работает с любой базой данных вы можете использовать DbProviderFactory класс и сделать ваши запросы, используя IDbConnection,IDbCommand, IDataReader и/или IDbTransaction интерфейсы.

Npgsql - .Net Provider for PostGreSQL-это отличный драйвер. Если вы использовали более традиционные ADO.NET рамки вам действительно повезло здесь. У меня есть код, который подключается к Oracle, который выглядит почти идентично подключениям PostGreSQL. Легче переходить от Oracle и повторно использовать клетки мозга.

Он поддерживает все стандартные вещи, которые вы хотели бы сделать с вызовом SQL, но он также поддерживает вызов функции (хранится порядки.) Это включает в себя возвращение ссылка курсоры. Документация хорошо написана и дает полезные примеры, не становясь философскими или тайными. Украсть код из документации и он будет сразу работать.

Франсиско Фигейредо, младший и команда проделали большую работу с этим.
Теперь он доступен на Github.
https://github.com/franciscojunior/Npgsql2

в лучший сайт для информации-это: http://npgsql.projects.postgresql.org/

читать документацию! http://npgsql.projects.postgresql.org/docs/manual/UserManual.html

есть поставщик Linq для PostgreSQL в https://www.nuget.org/packages/linq2db.PostgreSQL/.

мы разработали несколько приложений с использованием visual studio 2005 с devart ado.net поставщик данных для PostgreSql (http://www.devart.com/pgsqlnet/).

одним из преимуществ этого поставщика является то, что он обеспечивает полную поддержку Visual Studio. Последние версии включают в себя все новые функции фреймворка, такие как linq.

сегодня большинство языков / платформ (Java, .NET, PHP, Perl и др.) может работать практически с любой СУБД (SQL Server, Firebird, MySQL, Oracle, PostgresSQL и др.)) так что я бы не волновался ни на секунду. Конечно, могут быть глюки и небольшие проблемы, но нет showstopper.

Как предложил jalcom, вы должны программировать против набора интерфейсов или, по крайней мере, набора базовых классов (DbConnection, DbCommand и т. д.), чтобы иметь легко адаптируемое приложение.

У вас не должно быть слишком много проблем. Как уже упоминалось, существует множество поставщиков данных .Net PostgreSQL. Одна вещь, на которую вы можете обратить внимание, - это то, что такие функции, как Linq, вероятно, не смогут использоваться.

Не позволяйте отсутствие поддержки Linq остановить вас. Шаблон, который я использую, - это всегда возвращать мои данные в списки, а затем linq away. Я начал делать это религиозно, когда обнаружил, что то же самое (по общему признанию неясное) выражение Linq в MySQL не возвращало те же данные, что и в Sql Server.

просто перейдите в инструмент-- > менеджер пакетов NuGet-- > менеджер пакетов Nuget

искать NpgSql а затем выберите свой проект и нажмите кнопку Установить

пример кода

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();
            }            
        }

Не используйте верхний регистр в postgreSql, потому что его регистр чувствителен.