C # .NET + PostgreSQL - PullRequest
       58

C # .NET + PostgreSQL

51 голосов
/ 06 сентября 2008

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

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

Ответы [ 9 ]

52 голосов
/ 06 сентября 2008

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

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

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

11 голосов
/ 02 апреля 2012

Npgsql - Поставщик .Net для 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

11 голосов
/ 06 сентября 2008

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

3 голосов
/ 09 сентября 2008

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

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

2 голосов
/ 27 сентября 2013

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

2 голосов
/ 06 сентября 2008

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

2 голосов
/ 06 сентября 2008

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

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

1 голос
/ 30 ноября 2016

Просто зайдите в Инструмент -> Диспетчер пакетов 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, потому что он чувствителен к регистру.

0 голосов
/ 03 мая 2019

Npgsql - отличный драйвер, но единственная проблема, которую я до сих пор обнаружил, заключается в том, что числовое значение не помещается в System.Decimal, поэтому единственная опция корректна для каждого запроса или схемы БД

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...