C# Npgsql 连接检查器异常抛出 System.NullReferenceException 'Object reference not set to an instance of an object.'
C# Npgsql connection checker Exception Throw System.NullReferenceException 'Object reference not set to an instance of an object.'
我的代码尝试检查是 PostgreSQL 服务器 运行 并且可以通过给定数据库的给定凭据访问。使用 Npgsql NuGet。如果所有数据,IP、端口、用户、密码和数据库都正确,则代码 returns 为真。
这是一个代码:
public Boolean InsertInToPGSQL()
{
var pg_con_string = "Server=" + sqlinsertserver + ";" + "Port=" + sqlinsertport + ";" + "Database=" + sqlinsertdatabase + ";" + "User ID=" + sqlinsertusername + ";" + "Password=" + sqlinsertpassword + ";";
var pg_connetion = new NpgsqlConnection(pg_con_string);
try
{
if (pg_connetion != null)
{
pg_connetion.Open();
pg_connetion.Close();
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return false;
}
}
问题是,如果我写的 IP 地址没有服务器 运行,或者端口错误,或者错误 user/pass,数据库,我总是收到:
pg_connetion.Open();
一个错误:
System.NullReferenceException: 'Object reference not set to an instance of an object.'
问题是 catch(异常)不会捕获此错误并且 returns 简单错误。
我不需要处理错误类型,例如错误的凭据或 IP / 端口,只需要在成功连接到 PostgreSQL 服务器时为 true,在任何其他情况下为 false。
如何处理这个错误?
要获取异常详细信息,您需要执行 catch(Exception ex) 并且在 catch 块中,您可以执行 ex.InnerException 或 ex.Message 来查找异常详细信息。在您的情况下,由于参数不正确,连接对象为空。我会在 connection.open() 之前对连接对象进行空检查,这将避免对象引用未设置为实例。希望这应该能满足您的需要。将您的代码更改为以下内容并将 ex.Message 和 ex.InnerException 值发送给我。
public static class Application
{
public static void Main()
{
if (InsertInToPGSQL())
Console.WriteLine("Connection successful");
else
Console.WriteLine("Connection failed");
Console.ReadLine();
}
public static Boolean InsertInToPGSQL()
{
var pg_con_string = "";
var pg_connetion = new NpgsqlConnection(pg_con_string);
try
{
if (pg_connetion != null)
{
pg_connetion.Open();
pg_connetion.Close();
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
return false;
}
}
}
``
可能晚了,但对于像我一样对这个帖子有感觉的人来说,它可能很有用。
在更新 NpSql nuget 包之前,我遇到了同样的问题。我在 4.0.3,更新到 4.1.10。最后它解决了问题。
我的代码尝试检查是 PostgreSQL 服务器 运行 并且可以通过给定数据库的给定凭据访问。使用 Npgsql NuGet。如果所有数据,IP、端口、用户、密码和数据库都正确,则代码 returns 为真。
这是一个代码:
public Boolean InsertInToPGSQL()
{
var pg_con_string = "Server=" + sqlinsertserver + ";" + "Port=" + sqlinsertport + ";" + "Database=" + sqlinsertdatabase + ";" + "User ID=" + sqlinsertusername + ";" + "Password=" + sqlinsertpassword + ";";
var pg_connetion = new NpgsqlConnection(pg_con_string);
try
{
if (pg_connetion != null)
{
pg_connetion.Open();
pg_connetion.Close();
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return false;
}
}
问题是,如果我写的 IP 地址没有服务器 运行,或者端口错误,或者错误 user/pass,数据库,我总是收到:
pg_connetion.Open();
一个错误:
System.NullReferenceException: 'Object reference not set to an instance of an object.'
问题是 catch(异常)不会捕获此错误并且 returns 简单错误。
我不需要处理错误类型,例如错误的凭据或 IP / 端口,只需要在成功连接到 PostgreSQL 服务器时为 true,在任何其他情况下为 false。
如何处理这个错误?
要获取异常详细信息,您需要执行 catch(Exception ex) 并且在 catch 块中,您可以执行 ex.InnerException 或 ex.Message 来查找异常详细信息。在您的情况下,由于参数不正确,连接对象为空。我会在 connection.open() 之前对连接对象进行空检查,这将避免对象引用未设置为实例。希望这应该能满足您的需要。将您的代码更改为以下内容并将 ex.Message 和 ex.InnerException 值发送给我。
public static class Application
{
public static void Main()
{
if (InsertInToPGSQL())
Console.WriteLine("Connection successful");
else
Console.WriteLine("Connection failed");
Console.ReadLine();
}
public static Boolean InsertInToPGSQL()
{
var pg_con_string = "";
var pg_connetion = new NpgsqlConnection(pg_con_string);
try
{
if (pg_connetion != null)
{
pg_connetion.Open();
pg_connetion.Close();
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
return false;
}
}
}
``
可能晚了,但对于像我一样对这个帖子有感觉的人来说,它可能很有用。
在更新 NpSql nuget 包之前,我遇到了同样的问题。我在 4.0.3,更新到 4.1.10。最后它解决了问题。