Npgsql:是服务器关闭还是密码错误?
Npgsql : is the server down or a bad password?
我正在尝试从我的 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;新的 Npgsql 3.x 只有在从 PostgreSQL 服务器接收到错误时才会抛出 NpgsqlException。网络连接错误被引发为 SocketException 等。我们鼓励您升级。
顺便说一句:即使使用 Npgql 2.x,我也无法重现您的确切发现,连接到错误的端口或错误的 IP 导致 NpgsqlException,代码为空字符串,而不是 28P01。
使用 Npgsql v 3.0.2.0(不确定旧版本)如果 IP/hostname 错误,将抛出代码 =-2146233083 的异常。但是,如果 IP/hostname 是正确的但端口号是错误的异常代码 = -2147467259 将被抛出。如果 IP/port 正确但用户名/密码错误,将抛出代码为“28P01”的 NpgsqlException。
我正在尝试从我的 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;新的 Npgsql 3.x 只有在从 PostgreSQL 服务器接收到错误时才会抛出 NpgsqlException。网络连接错误被引发为 SocketException 等。我们鼓励您升级。
顺便说一句:即使使用 Npgql 2.x,我也无法重现您的确切发现,连接到错误的端口或错误的 IP 导致 NpgsqlException,代码为空字符串,而不是 28P01。
使用 Npgsql v 3.0.2.0(不确定旧版本)如果 IP/hostname 错误,将抛出代码 =-2146233083 的异常。但是,如果 IP/hostname 是正确的但端口号是错误的异常代码 = -2147467259 将被抛出。如果 IP/port 正确但用户名/密码错误,将抛出代码为“28P01”的 NpgsqlException。