Как отловить конкретную ошибку SqlException?

Q: Есть ли лучший способ обработки SqlExceptions?

Приведенные ниже примеры основаны на интерпретации текста сообщения.

Пример 1: У меня есть существующий улов попыток, который нужно обработать, если таблица не существует.
Не обращайте внимания на тот факт, что я мог бы проверить, существует ли таблица в первую очередь.

try
{
    //code
}
catch(SqlException sqlEx)
{
        if (sqlEx.Message.StartsWith("Invalid object name"))
        {
            //code
        }
        else
            throw;
}

Пример 2: без улова попытки, показывающего исключение повторяющегося ключа

if (sqlEx.Message.StartsWith("Cannot insert duplicate key row in object"))

Решение: Начало моего SqlExceptionHelper

//-- to see list of error messages: select * from sys.messages where language_id = 1033 order by message_id
public static class SqlExceptionHelper
{
    //-- rule: Add error messages in numeric order and prefix the number above the method

    //-- 208: Invalid object name '%.*ls'.
    public static bool IsInvalidObjectName(SqlException sex)
    { return (sex.Number == 208); }

    //-- 2601: Cannot insert duplicate key row in object '%.*ls' with unique index '%.*ls'. The duplicate key value is %ls.
    public static bool IsDuplicateKey(SqlException sex)
    { return (sex.Number == 2601); }
}
59
задан Minh Tran 20 November 2019 в 00:52
поделиться