Подтвердить что ты не робот

С#.NET + PostgreSQL

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

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