C# .NET + PostgreSQL

54

我正在考虑参与一个项目,使用C#.NET作为主要语言(在Windows平台上),PostgreSQL作为后端数据库(在Linux平台上)。我听说ODBC.NET可以轻松集成这两个组件。

有没有人实际上设置过C#和PostgreSQL之间的配合?如果有,您有什么建议如何进行,发现的问题等等?

9个回答

59

我正在使用 Npgsql2 组件来开发 C# 和 Postgres 相关的 IT 技术项目,它们运行速度快,强烈推荐。

你可以从 https://github.com/npgsql/Npgsql/releases 下载该组件。

注意:如果你想要一个能够与任何数据库兼容的应用程序,你可以使用 DbProviderFactory 类,并通过 IDbConnectionIDbCommandIDataReader 和/或 IDbTransaction 接口来进行查询。


1
下载链接未找到:请求的页面未找到(错误404)。 - Nick Kahn
2
FYI:官方不建议使用接口,而是希望您使用System.Data.Common中的抽象基类。虽然没有文档记录,但似乎在.NET2.0发布时,微软已经内部弃用了接口,转而使用基类,但并未通过其“Obsolete”属性进行通信。Github上的此问题是一个有趣的API兼容性阅读 :-) - mfeineis

14

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

它支持所有标准的SQL调用操作,但也支持调用函数(存储过程)。这包括引用光标的返回。文档写得非常好,并提供了有用的示例,而不会变得哲学或深奥。从文档中直接复制代码,它将立即生效。

Francisco Figueiredo, Jr和他的团队在这方面做得非常出色。
现在可以在Github上找到它。
https://github.com/franciscojunior/Npgsql2

获取更多信息的最佳站点是: http://npgsql.projects.postgresql.org/

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

(注:该链接为相关文档的网址)

11

这个项目现在似乎已经死了。答案中的链接无法解析。dblinq.codeplex.com指向github.com/dblinq/dblinq2007,它说现在已经存档并且不再维护。 - Hydrargyrum
已更新到一个维护良好的项目。不过我还没有尝试过它。 - David Schmitt

3
我们使用Visual Studio 2005和Devart ADO.NET数据提供程序为PostgreSql (http://www.devart.com/pgsqlnet/)开发了几个应用程序。
这个提供程序的一个优点是它提供完整的Visual Studio支持。最新版本包括所有新的框架特性,如linq。

我也使用过Devart ADO.NET数据提供程序来连接PostgreSQL。这是一个很好的产品,尽管你不能使用VS 2010内置的Entity Framework工具来处理你的实体数据模型。不过这没什么大不了的。 - Tony Vitabile

2
不要因为缺乏Linq支持而停下脚步。我使用的一种模式是将数据始终返回到列表中,然后使用Linq。当我发现在MySQL中相同(尽管有点晦涩)的Linq表达式没有像在Sql Server中那样返回相同的数据时,我开始无所保留地这样做。

2
今天大多数语言/平台(Java、.NET、PHP、Perl等)都可以与几乎任何DBMS(SQL Server、Firebird、MySQL、Oracle、PostgresSQL等)配合使用,所以我不会担心一秒钟。当然可能会有小问题和小故障,但没有阻塞问题。
正如jalcom建议的那样,你应该针对一组接口或至少一组基类(DbConnection、DbCommand等)进行编程,以实现易于适应的应用程序。

2

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


1

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

1
连接 = d_connection; // 您的连接字符串,应为:connection.ConnectionString = d_connection; // 您的连接字符串 - user3057544

0

这个问题已经解决了吗?或者我需要使用double或float类型来解决它? - Bartosz Olchowik
1
我认为这个问题没有解决。我找到的唯一方法是在SQL中四舍五入数字。 - Maciej

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接