簡體   English   中英

NpgsqlException 未在 catch 塊中捕獲

[英]NpgsqlException is not caught in catch block

我像這樣連接到本地 postgresql 實例:

        try
        {
            using (var connection = new NpgsqlConnection(connectionString))
            {
                using (var command = new NpgsqlCommand("loadProjects", connection))
                {
                    command.CommandType = CommandType.StoredProcedure;
                    connection.Open();

                    using (NpgsqlDataReader dataReader = command.ExecuteReader())
                    {
                       ...
                    }
                }
            }
        }
        catch (NpgsqlException ex)
        {
           ...
        }

然后出於測試目的,我從任務管理器 => 服務停止數據庫服務器,當我嘗試連接時當然會得到異常: “無法建立連接,因為目標機器主動拒絕它”但有趣的部分是這個異常沒有被捕獲catch 塊,但只是在行 connection.Open() 處使我的程序崩潰。 誰能解釋一下,為什么會這樣?

我建議你改變

catch (NpgsqlException ex)
    {
       ...
    }

catch (Exception ex)
    {
       ...
    }

並查看實際的異常類型

它可以是“PostgresException” https://www.npgsql.org/doc/api/Npgsql.PostgresException.html

試試這個。 您的 try-catch 塊在 using NpsqlConnection 之外。

using (var connection = new NpgsqlConnection (connectionString)) {
    using (var command = new NpgsqlCommand ("loadProjects", connection)) {
        command.CommandType = CommandType.StoredProcedure;

        try {
            connection.Open ();

            using (NpgsqlDataReader dataReader = command.ExecuteReader ()) {
                ...
            }

        } catch (NpgsqlException ex) {
            ...
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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