Я пытаюсь перехватить ошибку «Истекло время ожидания» от ADO.
Когда происходит тайм-аут, ADO возвращает:
Number: 0x80040E31 (DB_E_ABORTLIMITREACHED in oledberr.h)
SQLState: HYT00
NativeError: 0
Ноль NativeError
имеет смысл, поскольку время ожидания не является функцией механизма базы данных (то есть SQL Server), а является внутренним механизмом времени ожидания ADO.
Number
(то есть результат COM) выглядит полезным, но определение DB_E_ABORTLIMITREACHED
в oledberr.h
говорит:
Выполнение остановлено, поскольку достигнут предел ресурса. Результатов не было.
Эта ошибка может относиться к вещам, кроме " timeout expired " (некоторые потенциально на стороне сервера), например, ограничитель ограничения:
- загрузка процессора
- I / O читает / пишет
- пропускная способность сети
и останавливает запрос.
Последняя полезная часть - SQLState
, которая является независимой от базы данных системой кодов ошибок. К сожалению, единственная ссылка для кодов ошибок SQLState, которую я могу найти , не упоминает HYT00
.
Что делать?
Что делать?
Примечание: я не могу доверять
0x80040E31 (DB_E_ABORTLIMITREACHED)
означает " истекло время ожидания ", больше, чем я мог бы доверять
0x80004005 (E_UNSPECIFIED_ERROR)
означает « Транзакция заблокирована для ресурсов блокировки другого процесса и выбрана в качестве жертвы тупика ».
Мой псевдо-вопрос звучит так: есть ли у кого-нибудь документация о том, что означает SQLState "HYT000
"?
И мой реальный вопрос все еще остается: как я могу специально перехватить ADO истекло время ожидания исключение, выданное ADO?
Должен любить вопросы, где разработчик пытается " сделать правильную вещь ", но никто не знает , как сделать правильную вещь. Также надо любить гуглить на DB_E_ABORTLIMITREACHED
, и этот вопрос # 9, а MSDN нигде не найти.
Обновление 3
Из справочника OLEdb ICommand.Execute :
DB_E_ABORTLIMITREACHED
Выполнение было прервано, поскольку достигнут предел ресурса. Например, истекло время ожидания запроса. Результаты не возвращены.
" Например ", что означает не исчерпывающий список.
Обновление три
Нашел это. Ответ применяется как ответ.