![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Код ошибки Timeout expired в MS SQL Server. [MSSQL]
Дмитрий Тимохов © (2011-04-25 15:16:00)Добрый день!
Ситуация такова:
1. Использую базу данных MS SQL Server.
2. Для доступа использую ADODB.
3. Использую провайдер SQLOLEDB
Проблема:
1. Хочу отлавливать момент, когда ADODB.Command завершается с ошибкой "Timeout expired" для целей последующей отладки подобных ситуаций.
Что не получается:
1. Не могу понять, как по ADODB.Error понять, что произошла эта ошибка (кроме как анализировать ADODB.Error.Description - но это же несерьезно).
2. Не могу понять, откуда вообще брать коды ошибок, и что значат на самом деле ADODB.Error.NativeError и ADODB.Error.SqlState.
Что делал:
1. Поймал ошибку в runtime.
Description: "Timeout expired"
Native error: "0"
Source: "Microsoft OLE DB Provider for SQL Server"
SQLState: "HYT00"
2. Я подумал, что HYT00 это код ошибки из Microsoft OLE DB Provider for SQL Server. Но не нашел такого.
3. Потому я подумал, что это может код ошибки из стандарта SQL. Но там вроде согласно http://msdn.microsoft.com/en-us/library/aa937531%28SQL.80%29.aspxкодом ошибки для Timeout expired является S1T00
Вопросы:
1. Какая ошибка то должна быть?
2. Правильно я понимаю, что есть:
а) Ошибки ADODB
б) Ошибки сервера
в) Ошибки OLEDB Provider'а
Если да, то то где их всех отлавливать: в NativeError или SQLState?
3. Где взять списки возможных ошибок?
Дмитрий Тимохов (2011-04-25 17:08:00) [41]
> какой код?
//
// MessageId: DB_E_ABORTLIMITREACHED
//
// MessageText:
//
// Execution aborted because a resource limit has been reached; no
// results have been returned
//
DB_E_ABORTLIMITREACHED = HResult($80040E31);
OW (2011-04-25 17:02:00) [42]try
except
on E:Exception do
begin
EOleException(E).ErrorCode; // comobj
end;
end;
какой код?
Дмитрий Тимохов (2011-04-25 16:50:00) [43]Олегыч, ты вопрос то прочти.
Суть вопроса - по факту возвращается один код ошибки, а вроде должен быть другой, или я не понимаю что-то в структуре ошибок кодов ошибок...
Ega23 (2011-04-25 16:28:00) [44]
> Коннект нормальный. Я про выполнение запроса уже с помощью
> ADODB.Command.Execute. Меня интересует этот таймаут
ааа.
тогда см. ADODB.Command.CommandTimeout
Дмитрий Тимохов (2011-04-25 16:21:00) [45]Коннект нормальный. Я про выполнение запроса уже с помощью ADODB.Command.Execute. Меня интересует этот таймаут
Ega23 (2011-04-25 16:19:00) [46]
> Олегыч, ну я делал все это. Что нашел, то привел в вопросе.
Значит не так понял вопрос.
ЕМНИП, там две разных ошибки. Одна - собственно сам процесс коннекта. Вторая - длительное выполнение команды.
Возможно это именно та разница.
Дмитрий Тимохов (2011-04-25 15:55:00) [47]Олегыч, ну я делал все это. Что нашел, то привел в вопросе.
Почему вроде должен быть код ошибки в SQLState S1T00, а на самом деле HYT00...
Ega23 (2011-04-25 15:51:00) [48]Самое простое: тестовый проект, коннект к базе, отрубаешь сервер и вызываешь какой-нить запрос.
try
ADODataSet.Open;
except on E: Exception do
ShowMessage(E.ClassName);
end;
Вроде бы должен EOleError вернуть, у него код определённый есть. Выщучивай код и ищи в MSDN по нему (как в dec, так и в hex).
Ega23 (2011-04-25 15:48:00) [49]
> 1. Какая ошибка то должна быть?
Походу EOleException
> в) Ошибки OLEDB Provider'а
http://msdn.microsoft.com/en-us/library/ms190181.aspx
> 3. Где взять списки возможных ошибок?
Сейчас под рукой нет, см. в msdn и bol.
Вообще я когда-то давно что-то подобное ловил, там у класса исключения ErrorCode должен быть.