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

时间:2015-09-05 00:11:48

标签: c# .net database postgresql npgsql

我正在尝试从我的c#应用程序连接到PostgreSQL数据库,如下所示:

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.code不区分以下条件:

  1. 服务器IP /端口号错误
  2. 用户名和密码组合错误
  3. Code" 28P01"在两种情况下都返回。显然Npgsql可以看到服务器在那里,并且回复了一些表明用户名或密码错误的数据(上面的条件#2)或者似乎没有人(上面的条件#1)

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

顺便说一句:即使使用Npgql 2.x,我也无法重现您的确切结果,连接到错误的端口或错误的IP导致NpgsqlException,Code为空字符串,而不是28P01。

相关问题