簡體   English   中英

C# Npgsql 連接檢查器異常拋出 System.NullReferenceException '對象引用未設置為 object 的實例。

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM