Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

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

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

Франсиско Фигейредо-младший и его команда отлично с этим справились.
Теперь он доступен на Гитхаб.
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 и т. д.), так что я бы не беспокоился ни на секунду.Конечно, могут быть сбои и небольшие проблемы, но это не мешает.

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

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

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

Просто перейдите в Инструмент -> Диспетчер пакетов NuGet -> Диспетчер Диспетчер пакетов Nuget.

искать НпгСкл а затем выберите свой проект и нажмите «Установить».

образец кода

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, поскольку он чувствителен к регистру.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top