Не думайте, что определенный код ошибки всегда относится к одной и той же проблеме.
select * from master.dbo.sysmessages where description like '%timeout%'
Это даст вам все следующие возможные сообщения об ошибках - все с кодом 1033
:
Значение, указанное для тайм-аута, недопустимо. Тайм-аут должен быть допустимым целым числом от 0 до 2 147 483 647. 1033
Тайм-аут ожидания блокировки: класс '%ls', идентификатор %p, тип %d, задача 0x%p : %d, время ожидания %d секунд, флаги 0x%I64x, задача-владелец 0x%p. Продолжаем ждать. 1033
Связь с экземпляром удаленного сервера "%.*ls" не была завершена до истечения времени ожидания. Команда ALTER DATABASE могла быть не выполнена. Повторите команду. 1033
Значение тайм-аута зеркального отображения базы данных %d превышает максимальное значение 32767. 1033 Запись кэша метаданных %d:%d в идентификаторе базы данных (%d) не проверяется на согласованность из-за тайм-аута блокировки. 1033
Отмеченная транзакция "%.*ls" завершилась неудачно. Превышено время ожидания при попытке поставить отметку в журнале, зафиксировав помеченную транзакцию. Это может быть вызвано конфликтом с транзакциями координатора распределенных транзакций Microsoft (MS DTC) или другими 1033
Истекло время ожидания операции массовой вставки целевого объекта SQL Server. Рассмотрите возможность увеличения значения свойства Timeout в пункте назначения SQL Server в потоке данных. 1033
...и многие другие ошибки на всех языках.
Так что можно с уверенностью предположить, что 1033
означает какой-то тайм-аут? К сожалению, даже это неверно:
select description from master.dbo.sysmessages where msglangid=1033
Предупреждение: %S_DATE произошла фатальная ошибка %d. Запишите ошибку и время и обратитесь к системному администратору.
Запрос не разрешен в Waitfor.
Неверный синтаксис рядом с "%.*ls".
%S_MSG, начинающийся с "%.*ls", слишком длинный. Максимальная длина: %d. Элементы ORDER BY должны появиться в списке выбора, если инструкция содержит оператор UNION, INTERSECT или EXCEPT.
Номер позиции ORDER BY %ld выходит за пределы количества элементов в списке выбора.
и многие другие ошибки, не связанные с тайм-аутом.
Итак, я придерживаюсь:
IsSqlTimeout = ((ex as SqlException).Message.ToUpper().Contains("TIMEOUT");
Итак, чтобы на самом деле ответить на ваш вопрос - это зависит от того, что ваш пользователь действительно способен понять или о чем ему нужно рассказать.
Я бы посоветовал вам регистрировать все ошибки (коды и сообщения) за определенный период времени, группировать их и смотреть, какие из них наиболее распространены в вашей среде.
person
Simon_Weaver
schedule
11.04.2017