我正在研究一个使用 C#.NET(位于 Windows 机器上)作为主要语言并使用 PostgreSQL 作为后端数据库(后端位于 linux 机器上)的项目。我听说 ODBC.NET 允许轻松集成这两个组件。
有没有人有过实际设置 C# 和 PostgreSQL 一起工作的经验?如果是这样,您对如何处理、发现的问题等有什么建议吗?
我正在研究一个使用 C#.NET(位于 Windows 机器上)作为主要语言并使用 PostgreSQL 作为后端数据库(后端位于 linux 机器上)的项目。我听说 ODBC.NET 允许轻松集成这两个组件。
有没有人有过实际设置 C# 和 PostgreSQL 一起工作的经验?如果是这样,您对如何处理、发现的问题等有什么建议吗?
我正在使用Npgsql2组件使用 C# 和 Postgres,它们工作得很快,我推荐你。
您可以从https://github.com/npgsql/Npgsql/releases下载
注意:如果您想要一个适用于任何数据库的应用程序,您可以使用DbProviderFactory类并使用IDbConnection、IDbCommand、IDataReader和/或IDbTransaction接口进行查询。
Npgsql - PostGreSQL 的 .Net 提供程序 - 是一个出色的驱动程序。如果您使用过更传统的 ADO.NET 框架,那么您真的很幸运。我有连接到 Oracle 的代码,看起来几乎与 PostGreSQL 连接相同。更容易脱离 Oracle 并重用脑细胞。
它支持调用 SQL 时想要执行的所有标准操作,但它也支持调用函数(存储过程)。这包括返回引用游标。该文档写得很好,并提供了有用的示例,而不会变得哲学或晦涩难懂。直接从文档中窃取代码,它就会立即运行。
Francisco Figueiredo, Jr's 和团队在这方面做得很好。
它现在在Github上可用。
https://github.com/franciscojunior/Npgsql2
更好的信息站点是: http: //npgsql.projects.postgresql.org/
阅读文档! http://npgsql.projects.postgresql.org/docs/manual/UserManual.html
在https://www.nuget.org/packages/linq2db.PostgreSQL/有一个 PostgreSQL 的 Linq 提供程序。
我们使用 Visual Studio 2005 和 PostgreSql 的 devart ado.net 数据提供程序(http://www.devart.com/pgsqlnet/)开发了几个应用程序。
此提供程序的优点之一是它提供了完整的 Visual Studio 支持。最新版本包括所有新的框架功能,如 linq。
今天,大多数语言/平台(Java、.NET、PHP、Perl 等)几乎可以与任何 DBMS(SQL Server、Firebird、MySQL、Oracle、PostgresSQL 等)一起使用,所以我一秒钟都不会担心。当然可能会有小故障和小问题,但不会有任何阻碍。
正如 jalcom 建议的那样,您应该针对一组接口或至少一组基类(DbConnection、DbCommand 等)进行编程,以获得易于适应的应用程序。
你不应该有太多问题。正如其他人所提到的,有许多 .Net PostgreSQL 数据提供程序可用。您可能需要注意的一件事是可能无法使用 Linq 之类的功能。
不要让缺乏 Linq 支持阻止你。我使用的一种模式是始终将我的数据返回到列表中,然后 linq 离开。当我发现 MySQL 中相同的(诚然晦涩的)Linq 表达式没有带回与 Sql Server 中相同的数据时,我开始虔诚地这样做。
只需转到工具--> NuGet 包管理器-->Manager 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 中使用大写,因为它区分大小写。
Npgsql 是优秀的驱动程序,但到目前为止我发现的唯一问题是数值不适合 System.Decimal,因此唯一的选项是正确的每个查询或 DB 模式
https://github.com/npgsql/Npgsql.EntityFrameworkCore.PostgreSQL/issues/438#issuecomment-486586272