Нарушение ограничения SqlException - PullRequest
4 голосов
/ 25 марта 2010

Я работаю над приложением asp.net. Есть ли способ, когда ловить SqlException, узнать, какое ограничение было нарушено?

Ответы [ 5 ]

8 голосов
/ 25 марта 2010

SqlException имеет коллекцию объектов SqlError: Ошибки . SqlError имеет свойства для ошибки Number , и вы можете сравнить это с известными номерами ошибок нарушения ограничений (например, 2627).

Хотя верно, что само SqlException предоставляет свойство Number, не совсем верно, если в одном пакете происходит несколько ошибок, и, следовательно, лучше проверять коллекцию Errors.

4 голосов
/ 09 апреля 2013
catch (SqlException ex)
{
    if (ex.Errors.Count > 0) // Assume the interesting stuff is in the first error
    {
        switch (ex.Errors[0].Number)
        {
            case 547: // Foreign Key violation
                throw new InvalidOperationException("Your FK user-friendly description", ex);
                    break;
            // other cases
        }
    }
}
2 голосов
/ 25 марта 2010

Вы должны добавить обработчик исключений для ConstraintException, если я правильно понимаю ваш вопрос

try
{

}
catch(ConstraintException exc)
{
//exc.Message 
}
0 голосов
/ 15 сентября 2011

Лучше всего поймать это исключение в вашем коде C #.

catch(SqlException ex)
{
    if (ex.Message.Contains("UniqueConstraint"))
        throw new UniqueConstraintException();

    throw;
} 

Вы можете создать собственное исключение и выбросить его из слоя данных, в противном случае вы можете напрямую перехватить исключение, как упомянуто выше.

using System; 

public class UniqueConstraintException : Exception
{
} 
0 голосов
/ 25 марта 2010

Вы позволяете всплыть исключению?Если вы не поймете это и не отключите пользовательские ошибки в файле web.config, я думаю, он отобразится в вашем браузере.Если вы ловите его, я бы поставил точку останова в секции catch и проверил там исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...