Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Npgsql:服务器是否已关闭或密码错误?_C#_.net_Database_Postgresql_Npgsql - Fatal编程技术网

C# Npgsql:服务器是否已关闭或密码错误?

C# Npgsql:服务器是否已关闭或密码错误?,c#,.net,database,postgresql,npgsql,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)

我正在尝试从我的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不区分以下条件:

  • 服务器ip/端口号错误
  • 用户名和密码组合错误
  • 在这两种情况下都返回代码“28P01”。显然,Npgsql可以看到服务器在那里,并使用一些数据进行响应,这些数据指示用户名或密码不正确(上面的条件#2)或者似乎没有人在那里(上面的条件#1)


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

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


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

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

    您可以尝试手动打开TCP连接…是的,但这只会告诉我有什么东西正在该端口上侦听。我不会告诉我在听什么。e、 那里可能有MySQL数据库!当我一个月前开始我的项目时,我正在使用Npgsql 2。现在我使用的是NPGSQLv3.0.1.0,正如可视化研究所示。您确定在您的主机和端口上没有PostgreSQL侦听吗?Npgsql不仅仅制造代码为28P01的Npgsql异常……你是对的。有人已经在上面发布了一些异常代码。嵌入长的数字错误代码肯定会让你知道你做错了什么。如果IP存在且端口错误,您将得到一个SocketException,其SocketErrorCode等于SocketError.ConnectionRejected(请参阅测试)。如果给定IP上没有服务器,则连接尝试通常会超时,引发TimeoutException(请参阅测试)。