54

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

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

4

9 回答 9

58

我正在使用Npgsql2组件使用 C# 和 Postgres,它们工作得很快,我推荐你。

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

注意:如果您想要一个适用于任何数据库的应用程序,您可以使用DbProviderFactory类并使用IDbConnectionIDbCommandIDataReader和/或IDbTransaction接口进行查询。

于 2008-09-05T23:33:26.020 回答
13

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

于 2012-04-02T17:01:39.320 回答
11

在https://www.nuget.org/packages/linq2db.PostgreSQL/有一个 PostgreSQL 的 Linq 提供程序。

于 2008-09-06T16:06:50.217 回答
3

我们使用 Visual Studio 2005 和 PostgreSql 的 devart ado.net 数据提供程序(http://www.devart.com/pgsqlnet/)开发了几个应用程序。

此提供程序的优点之一是它提供了完整的 Visual Studio 支持。最新版本包括所有新的框架功能,如 linq。

于 2008-09-09T12:12:05.437 回答
2

今天,大多数语言/平台(Java、.NET、PHP、Perl 等)几乎可以与任何 DBMS(SQL Server、Firebird、MySQL、Oracle、PostgresSQL 等)一起使用,所以我一秒钟都不会担心。当然可能会有小故障和小问题,但不会有任何阻碍。

正如 jalcom 建议的那样,您应该针对一组接口或至少一组基类(DbConnection、DbCommand 等)进行编程,以获得易于适应的应用程序。

于 2008-09-06T00:04:37.427 回答
2

你不应该有太多问题。正如其他人所提到的,有许多 .Net PostgreSQL 数据提供程序可用。您可能需要注意的一件事是可能无法使用 Linq 之类的功能。

于 2008-09-06T00:07:53.987 回答
2

不要让缺乏 Linq 支持阻止你。我使用的一种模式是始终将我的数据返回到列表中,然后 linq 离开。当我发现 MySQL 中相同的(诚然晦涩的)Linq 表达式没有带回与 Sql Server 中相同的数据时,我开始虔诚地这样做。

于 2013-09-26T21:02:01.050 回答
1

只需转到工具--> 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 中使用大写,因为它区分大小写。

于 2016-11-30T07:29:13.090 回答
0

Npgsql 是优秀的驱动程序,但到目前为止我发现的唯一问题是数值不适合 System.Decimal,因此唯一的选项是正确的每个查询或 DB 模式

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

于 2019-05-03T16:56:25.317 回答