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

Esa*_*ily 5 .net c# database postgresql npgsql

我试图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
}
Run Code Online (Sandbox Code Playgroud)

问题是:NpgsqlException.code不区分以下条件:

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

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

如何区分我的代码中的这2个案例?

EKa*_*ily 4

对于 Npgsql v 3.0.2.0(不确定旧版本),如果 IP/主机名错误,则会抛出代码 =-2146233083 的异常。但是,如果 IP/主机名正确但端口号错误,则会抛出代码 = -2147467259 的异常。如果 IP/端口正确,但用户名/密码错误,则会抛出代码 =“28P01”的 NpgsqlException。