Npgsql:服务器关闭或密码错误

本文关键字:密码 错误 服务器 Npgsql | 更新日期: 2023-09-27 18:11:29

我正在尝试连接到PostgreSQL数据库从我的c#应用程序,像这样:

NpgsqlConnection MyConnection = new           
NpgsqlConnection("Server=localhost;Port=5432;User Id=postgres;Password=mypassword;Database=mydatabase;");
try
{
    MyConnection.Open();
}
catch (NpgsqlException pe)
{              
    //Code "28P01" = user name or password is wrong 
    // server ip or port  is wrong
}

问题是:NpgsqlException。代码不区分以下条件:

  1. 服务器ip/端口号错误
  2. 用户名和密码组合错误

代码"28P01"在两种情况下都返回。显然,Npgsql可以看到服务器在那里,并响应一些数据,表明错误的用户名或密码(上述条件#2)或似乎没有人在那里(上述条件#1)

我如何在我的代码中区分这两种情况?

Npgsql:服务器关闭或密码错误

使用Npgsql v 3.0.2.0(不确定旧版本),如果IP/主机名错误,则抛出code =-2146233083 with的异常。然而,如果IP/主机名是正确的,但端口号是错误的,抛出code= -2147467259 with的异常。如果IP/端口正确,但用户名/密码错误,将抛出代码= "28P01"的NpgsqlException。

您可能正在使用Npgsql 2.x;新的Npgsql 3。只有当从PostgreSQL服务器接收到错误时,才会抛出NpgsqlException。网络连接错误被引发为SocketException等。建议您升级。

顺便说一句:即使使用Npgql 2,我也无法重现你的确切发现。x,连接到错误的端口或错误的IP导致NpgsqlException与代码是一个空字符串,而不是28P01。