我正在研究一个项目,该项目使用 C#.NET(位于 Windows 机器上)作为主要语言,并使用 PostgreSQL 作为后端数据库(后端位于 Linux 机器上)。我听说 ODBC.NET 可以轻松集成这两个组件。

有人有过实际设置 C# 和 PostgreSQL 协同工作的经验吗?如果是这样,您对如何去做、发现的问题等有什么建议吗?

有帮助吗?

解决方案

我正在使用 C# 和 Postgres NPGSQL2 组件,而且它们工作速度很快,我推荐你。

您可以从下载 https://github.com/npgsql/Npgsql/releases

笔记: 如果您想要一个适用于任何数据库的应用程序,您可以使用 数据库提供者工厂 类并使用进行查询 IDb连接, IDb命令, 数据读取器 和/或 IDb事务 接口。

其他提示

NpgSQL - .Net Provider for PostGreSQL - 是一个优秀的驱动程序。如果您使用过更传统的 ADO.NET 框架,那么您真的很幸运。我有连接到 Oracle 的代码,看起来与 PostGreSQL 连接几乎相同。更容易从 Oracle 过渡并重用脑细胞。

它支持您想要通过调用 SQL 执行的所有标准操作,但它也支持调用 功能 (存储过程)。这包括返回 参考光标. 。该文档写得很好,提供了有用的示例,但没有哲学或晦涩难懂。直接从文档中窃取代码,它将立即起作用。

Francisco Figueiredo, Jr 和团队在这方面做得非常出色。
现在可以在 吉图布.
https://github.com/franciscojunior/Npgsql2

更好的信息网站是:http://npgsql.projects.postgresql.org/

阅读文档!http://npgsql.projects.postgresql.org/docs/manual/UserManual.html

有一个 PostgreSQL 的 Linq 提供程序,位于 https://www.nuget.org/packages/linq2db.PostgreSQL/.

我们使用 Visual Studio 2005 和用于 PostgreSql 的 devarado.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 包管理器”-->“管理器 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,因此只有选项是正确的每个查询或数据库模式

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top