SqlException ErrorCode возвращает -2146232060 вместо 26 (не удается найти экземпляр сервера) - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь обработать исключение. Я знаю, что его ErrorCode равен 26, но он не возвращает правильное целое число, давая мне -2146232060.

Снимок экрана QuickWatch с описанием исключения

Так что вместо того, чтобы писать это:

catch (SqlException e)
{
    if (e.ErrorCode == 26)
    {
        //my code
    }
}

Я должен использовать это:

catch (SqlException e)
{
    if (e.Message.ToUpper().Contains("ERROR: 26"))
    {
        //my code
    }
}

Почему он возвращает -2146232060 и как я могу получить 26 такМне не нужно сравнивать все эти строковые значения?

1 Ответ

0 голосов
/ 26 июня 2018

Я думаю, что вы хотите посмотреть на SqlException.Number (который является номером ошибки SQL), а не SqlException.ErrorCode (который является номером ошибки драйвера SQL).

static void Main (string [] args) {

        try {
            var connection = new SqlConnection(@"Data Source=(localdb)\mssqllocaldb;Initial Catalog=Sandbox;Integrated Security=SSPI;");
            connection.Open();
            var command = new SqlCommand("throw 50000, 'oops', 1;", connection);
            command.ExecuteNonQuery();
        }
        catch (SqlException ex) {
            Console.WriteLine(ex.ErrorCode + ": " + ex.Number + ": " + ex.Message);
            for (int i = 0; i < ex.Errors.Count; i++)
                Console.WriteLine(ex.Errors[i].Number + ": " + ex.Errors[i].Message);
        }
        catch (Exception ex) {
            Console.WriteLine(ex.Message);
        };

    }

... yields ...

-2146232060: 50000: oops
50000: oops

Намного больше информации о SqlException на MSDN и о конкретной ошибке, которую вы получаете здесь .

...