连接字符串上的 Npgsql 异常

Posted

技术标签:

【中文标题】连接字符串上的 Npgsql 异常【英文标题】:Npgsql exception on connection string 【发布时间】:2017-07-10 14:40:59 【问题描述】:

我无法让 Npgsql 连接字符串工作。我尝试了一些方法,例如

NpgsqlConnection conn = new NpgsqlConnection("Server=192.168.1.220;User Id=pgsql;Password=pgsql;Database=pgsql;");

var conn = new NpgsqlConnection("Host=192.168.1.220;Username=pgsql;Password=pgsql;Database=pgsql");

都给我抛出异常:

“Npgsql.NpgsqlConnectionStringBuilder”的类型初始化器抛出异常。

我正在运行带有 VS 2010 的 Windows XP 64 位。我已经尝试使用 ODBC 或 pgAdmin III 从那台机器连接到我的 pgsql 服务器 - 都可以正常工作。

这个问题可能与我的 Npgsql 安装有关吗? 我无法使用 NuGet 安装它,因为出现以下错误:

PM> 安装包 Npgsql 安装“Npgsql 3.2.1”。 成功安装“Npgsql 3.2.1”。 将“Npgsql 3.2.1”添加到项目中。 卸载“Npgsql 3.2.1”。 成功卸载“Npgsql 3.2.1”。 安装失败。滚回来... 安装包:无法安装包“Npgsql 3.2.1”。您正在尝试将此包安装到以“.NETFramework,Version=v4.0,Profile=Client”为目标的项目中,但该包 e 不包含任何与该框架兼容的程序集引用或内容文件。有关详细信息,请联系包作者。 在行:1 字符:16 + 安装包

我也尝试将目标框架切换到 4.0 或 3.5,但结果完全相同。 所以我只是通过从 MSI 安装中提取 .dll 来安装 Npgsql,然后将其加载为参考。

有人知道如何使连接字符串起作用吗?

【问题讨论】:

从您的 nuget 安装异常来看,您似乎正在尝试将 Npgsql 安装到 .NET Framework 4.0 项目中 - 这不受支持。支持的最低版本是 4.5。 如果您仍然在 .NET 4.5(或更高版本)应用程序中遇到异常,请发布您收到的完整异常,包括完整的堆栈跟踪和任何内部异常。仅凭“类型初始化程序引发异常”是不可能知道发生了什么的。 看来问题和你描述的完全一样,但我需要 .NET 4.0 才能让它在 WinXP 上运行,所以,我通过从 Npgsql 切换到 Devart 基本 pgsql 库解决了我的问题。谢谢。 【参考方案1】:

您忘记了端口。也许这就是原因。侦听端口 5432 的标准 PostgreSQL 服务器。

NpgsqlConnection conn = new NpgsqlConnection("Server=192.168.1.220;Port=5432;User Id=pgsql;Password=pgsql;Database=pgsql;");

Example Connection String

也许您没有库 Mono.Security.dll。 3.0以下的旧版本是必须的还是启用了系统防火墙?

【讨论】:

感谢您的回复,但它没有帮助,我得到了同样的错误。防火墙被禁用,我可以使用 pgAdmin ||| 从这台机器连接到服务器或 ODBC。 也许你没有库 Mono.Security.dll。在低于 3.0 的旧版本中是必需的。 端口不是必须的,Npgsql默认使用5432端口。

以上是关于连接字符串上的 Npgsql 异常的主要内容,如果未能解决你的问题,请参考以下文章

Npgsql .net 版本的PostgreSQL数据库连接字符串及参数

Npgsql .net 版本的PostgreSQL数据库连接字符串及参数

Npgsql .net 版本的PostgreSQL数据库连接字符串及参数

Postgres Npgsql 连接池

ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库(问题总结)

Entity Framework 5.0 PostgreSQL (Npgsql) 默认连接工厂