2012-05-10 4 views
0

У меня есть вопрос, и это не проблема. В моей базе данных есть некоторые ограничения, как уникальные имена (Столбец, в котором хранится имя чего-то уникального) При вставке или обновлении db проверяет, не перекрываем ли мы какое-то имя, и если да, возвращает ошибку, которая может быть конвертируемой к SqlException с кодом 2627SqlException ErrorCodes

Мой вопрос ... если существует какая-то таблица или что-то, что я могу проконсультироваться, чтобы указать конечному пользователю, что делать?

В этом случае .. что существует пользователь с таким же именем ....

ответ

2

Я думаю, вы должны смотреть на SQLExceptions Errors property и посмотреть на errors number, который укажет вам на сообщение в master.dbo.sysmessages.

0

Следите за тем, чтобы определенный код ошибки ссылался на что-то конкретное.

select * from master.dbo.sysmessages where description like '%timeout%' 

Это даст вам:

Значение, указанное для тайм-аута не является действительным. Таймаут должен быть действительным целым числом от 0 до 2147483647. 1033

Тайм-аут произошел при ожидании защелки: класс '% ls', id% p, type% d, Задача 0x% p:% d, waittime% d секунд, флаги 0x% I64x, владеющая заданием 0x% p. Продолжая ждать. 1033

Коммуникации с экземпляром удаленного сервера «%. * Ls» не были выполнены до истечения таймаута. Возможно, команда ALTER DATABASE не выполнена. Повторите команду. 1033

Значение времени ожидания зеркального отображения базы данных% d превышает максимальное значение 32767. 1033 Запись в кэш метаданных% d:% d в идентификаторе базы данных (% d) не проверяется на согласованность из-за таймаута блокировки. 1033

Отмеченная сделка «%. * Ls» не удалась. Тайм-аут произошел при попытке поместить отметку в журнал, совершив отмеченную транзакцию. Это может быть вызвано конфликтом с транзакциями Microsoft Distributed Transaction Coordinator (MS DTC) или другими 1033

Операция «Массовая вставка» для SQL Server Destination имеет время ожидания. Пожалуйста, подумайте об увеличении значения свойства Timeout в целевом сервере SQL Server в потоке данных. 1033

... и многие другие ошибки на всех языках.

Таким образом, вы можете предположить, что «1033 означает таймаут». К сожалению, это не так:

select description from master.dbo.sysmessages where msglangid=1033 

Предупреждение: Фатальная ошибка% d произошло в% S_DATE. Обратите внимание на ошибку и время, а также обратитесь к системному администратору.

Запрос не допускается в Waitfor.

Неверный синтаксис около '%. * Ls'.

% S_MSG, которое начинается с '%. * Ls', слишком длинное. Максимальная длина равна% d. Элементы ORDER BY должны отображаться в списке выбора, если оператор содержит оператор UNION, INTERSECT или EXCEPT.

Номер позиции ORDER BY% ld находится вне допустимого диапазона количества элементов в списке выбора.

и многие другие ошибки, не связанные с таймаутом.

Так я придерживаюсь:

IsSqlTimeout = ((ex as SqlException).Message.ToUpper().Contains("TIMEOUT"); 

Так на самом деле ответить на ваш вопрос - это зависит от того, что ваш пользователь на самом деле способен понять или должно быть сказано о.

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

Смежные вопросы