![](/img/trans.png)
[英]System.NullReferenceException - Object reference not set to an instance of an object. Causes in C#
[英]C# Npgsql connection checker Exception Throw System.NullReferenceException 'Object reference not set to an instance of an object.'
我的代碼嘗試檢查 PostgreSQL 服務器是否正在運行,並且可以通過給定數據庫的給定憑據進行訪問。 使用 Npgsql NuGet。 如果所有數據,IP、Port、User、Pass 和 Database 都正確,則代碼返回 true。
這是一個代碼:
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 地址,其中沒有服務器在運行,或者端口錯誤,或者錯誤的用戶/密碼,數據庫,我總是收到:
pg_connetion.Open();
一個錯誤:
System.NullReferenceException:“對象引用未設置為 object 的實例。”
問題是一個catch(異常)沒有捕捉到這個錯誤並返回簡單的假。 我不需要處理錯誤類型,例如錯誤的憑據或 IP / 端口,只需要在成功連接到 PostgreSQL 服務器時設置為 true,對於任何其他情況為 false。
如何處理這個錯誤?
要獲取異常詳細信息,您需要執行 catch(Exception ex) 並且在 catch 塊中您可以執行 ex.InnerException 或 ex.Message 來查找異常詳細信息。 在您的情況下,由於參數不正確,連接 object 是 null。 我會在 connection.open() 之前對連接 object 進行 null 檢查,這將避免 object 引用未設置為實例。 希望這應該足以滿足您的需要。 將您的代碼更改為以下並將 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;
}
}
}
``
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.