C# .NET + PostgreSQL

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
54
0
57 763
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

Ответ принят как подходящий

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

Скачать можно с https://github.com/npgsql/Npgsql/releases

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

ссылка для скачивания не найдена: запрошенная страница не найдена (ошибка 404)

Nick Kahn 20.03.2015 04:07

К вашему сведению: официально не рекомендуется использовать интерфейсы, вместо этого Microsoft хочет, чтобы вы использовали абстрактные базовые классы в System.Data.Common. Это вообще не задокументировано, но кажется, что в момент выпуска .NET2.0 MS внутренне устарела интерфейсы в пользу базовых классов, не сообщая об этом через свой атрибут Obsolete. Этот выпуск на Github - интересное чтение по совместимости API :-)

mfeineis 22.12.2016 15:23

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

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

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

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

Этот проект кажется мертвым. Ссылка в ответе не разрешается. dblinq.codeplex.com указывает на github.com/dblinq/dblinq2007, в котором говорится, что он теперь заархивирован и не обслуживается.

Hydrargyrum 21.12.2017 07:55

Обновлено до поддерживаемого проекта. Но я не пробовал.

David Schmitt 28.12.2017 17:42

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

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

Я также использовал поставщик данных devart ado.net для PostgreSql. Это был хороший продукт, хотя вы не могли использовать инструменты Entity Framework, встроенные в VS 2010, для работы с вашей моделью данных Entity. Впрочем, ничего страшного.

Tony Vitabile 27.09.2013 01:28

Npgsql - .Net Provider для 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 останавливать вас. Я использую шаблон, чтобы всегда возвращать мои данные в списки, а затем удалять linq. Я начал делать это неукоснительно, когда обнаружил, что одно и то же (по общему признанию неясное) выражение 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, потому что он чувствителен к регистру.

вместо этого: connection = d_connection; // ваша строка подключения должна быть: connection.ConnectionString = d_connection; // ваша строка подключения

user3057544 08.01.2017 12:32

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

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

это уже как-то решено? Или мне нужно использовать, например, double или float?

Bartosz Olchowik 01.03.2021 16:27

Я не думаю, что это было решено. Единственный способ, которым я нашел, - это округление чисел в SQL

Maciej 02.03.2021 12:52

спасибо за ответ @Maciej

Bartosz Olchowik 02.03.2021 18:51

Другие вопросы по теме