NpgsqlException не перехватывается в блоке catch - PullRequest
0 голосов
/ 04 марта 2020

Я подключаюсь к локальному 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)
        {
           ...
        }

Затем для целей тестирования я прекращаю работу сервера базы данных из диспетчера задач => Службы и, когда я пытаюсь подключиться, конечно, получаю исключение: «Невозможно установить соединение, потому что целевая машина активно отказалась от него» * ​​1005 * Но интересная часть заключается в том, что это исключение не перехватывается блоком catch, а просто вызывает сбой моей программы на линии соединения .Open (). Кто-нибудь может объяснить, почему это так?

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Попробуйте вместо этого. Ваш блок try-catch находится вне области использования 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) {
            ...
        }
    }
}
0 голосов
/ 04 марта 2020

Я рекомендую вам изменить

catch (NpgsqlException ex)
    {
       ...
    }

на

catch (Exception ex)
    {
       ...
    }

и увидеть фактический тип исключения

это может быть "PostgresException" https://www.npgsql.org/doc/api/Npgsql.PostgresException.html

...