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





Я работаю с C# и Postgres, используя компонент Npgsql2, и они работают быстро, рекомендую.
Скачать можно с https://github.com/npgsql/Npgsql/releases
Примечание: Если вам нужно приложение, которое работает с любой базой данных, вы можете использовать класс DbProviderFactory и выполнять запросы с использованием интерфейсов IDbConnection, IDbCommand, IDataReader и / или IDbTransaction.
К вашему сведению: официально не рекомендуется использовать интерфейсы, вместо этого Microsoft хочет, чтобы вы использовали абстрактные базовые классы в System.Data.Common. Это вообще не задокументировано, но кажется, что в момент выпуска .NET2.0 MS внутренне устарела интерфейсы в пользу базовых классов, не сообщая об этом через свой атрибут Obsolete. Этот выпуск на Github - интересное чтение по совместимости API :-)
Сегодня большинство языков / платформ (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, в котором говорится, что он теперь заархивирован и не обслуживается.
Обновлено до поддерживаемого проекта. Но я не пробовал.
Мы разработали несколько приложений с использованием Visual Studio 2005 с поставщиком данных devart ado.net для PostgreSql (http://www.devart.com/pgsqlnet/).
Одним из преимуществ этого поставщика является то, что он обеспечивает полную поддержку Visual Studio. Последние версии включают в себя все новые функции фреймворка, такие как linq.
Я также использовал поставщик данных devart ado.net для PostgreSql. Это был хороший продукт, хотя вы не могли использовать инструменты Entity Framework, встроенные в VS 2010, для работы с вашей моделью данных Entity. Впрочем, ничего страшного.
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; // ваша строка подключения
Npgsql - отличный драйвер, но единственная проблема, которую я обнаружил до сих пор, заключается в том, что числовое значение не вписывается в System.Decimal, поэтому только опция верна для каждого запроса или схемы БД.
https://github.com/npgsql/Npgsql.EntityFrameworkCore.PostgreSQL/issues/438#issuecomment-486586272
это уже как-то решено? Или мне нужно использовать, например, double или float?
Я не думаю, что это было решено. Единственный способ, которым я нашел, - это округление чисел в SQL
спасибо за ответ @Maciej
ссылка для скачивания не найдена: запрошенная страница не найдена (ошибка 404)