C# Npgsql:服务器是否已关闭或密码错误?
我正在尝试从我的c#应用程序连接到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)
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不区分以下条件:
如何在代码中区分这两种情况?您可能正在使用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(请参阅测试)。