![]() |
| ||
|
|
Новости |
Поиск |
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-27 01:35:00) [1]Итог понятный. Серебряной пули нет. Надо в части кодов ошибок разбираться по месту.
sniknik (2011-04-27 00:15:00) [2]из хелпа ADO
Дмитрий Тимохов (2011-04-26 23:49:00) [3]Всех благодарю. Со своей прикладной задачей разобрался.
> sniknik © (26.04.11 20:50) [44]
Откуда цитата?
sniknik (2011-04-26 21:29:00) [4]> Ну это костыли от Борланд,
ну, а там костыли от Мелкософт... (если конечно у него реально нет ODBC провайдера в связке подключения, но коды его ошибок есть).
кто то значит захотел совместимости, единообразия, "позаботился" о нас... подумал что мы не сможем осилить нового списка ошибок... и... вуаля! транслирование старого и неполного с точки зрения нового есть, а полного списка новых нет ;(.
Anatoly Podgoretsky (2011-04-26 21:08:00) [5]> sniknik (26.04.2011 20:37:43) [43]
Ну это костыли от Борланд, они бедненькие думадт, что мы не сможем осилить
TAdoDataset
sniknik (2011-04-26 20:50:00) [6]SQLState Property
Remarks
Use the SQLState property to read the five-character error code that the provider returns when an error occurs during the processing of an SQL statement. For example, when using the Microsoft OLE DB Provider for ODBC with a Microsoft SQL Server database, SQL state error codes originate from ODBC, based either on errors specific to ODBC or on errors that originate from Microsoft SQL Server, and are then mapped to ODBC errors. These error codes are documented in the ANSI SQL standard, but may be implemented differently by different data sources.
sniknik (2011-04-26 20:37:00) [7]> Почему тогда выводятся ошибки ODBC, когда я пользуюсь SQLOLEDB из ADODB?
а почему в дельфи есть ADOTable/ADOQuery? хотя к ADO они не имеют вообще никакого отношения, а вот для BDE "родные".
для совместимости, и разных менеджерских "заморочек" (чтобы при "продвижении" продукта был аргумент "да вам ничего даже переделывать не нужно будет! замените одно на другое да и все..." ).
тип/провайдер ошибки идет в NativeError, по сравнивай его с разными.
OW (2011-04-26 16:48:00) [8]http://www.sql.ru/articles/mssql/2005/122703ADO.shtml
Дмитрий Тимохов (2011-04-26 16:37:00) [9]Почему тогда выводятся ошибки ODBC, когда я пользуюсь SQLOLEDB из ADODB?
Anatoly Podgoretsky (2011-04-26 16:34:00) [10]ODBC не имеет никакого отношения к SQLOLEDB
Дмитрий Тимохов (2011-04-26 16:08:00) [11]ЕЩЕ ВОПРОС
Задаю тут, т.к. новый вопрос в общем связан с топиком.
Вопрос несколько общий.
ВОПРОС 1.Скажите, пожалуйста, как взаимосвязаны ODBC, OLE DB и АDO?
Поясню:
1. АDO использует в ConnectionString провайдер OLEDB для доступа SQLOLEDB.
2. А ODBC тут каким боком? Он лежит в основе OLE DB? Или OLE DB сам обращается к БД? Я так понимаю, что ODBC самая низкоуровневая библиотека работы с БД, а на ней уже строится все остальное - OLE DB и ADO.
Если я правильно предполагаю, и в основе ADO лежит ODBC, то возникает ВОПРОС 2.Как понять, какая версия ODBC используется в основе ADO?
Дмитрий Тимохов (2011-04-26 15:40:00) [12]
> Вариант (26.04.11 15:01) [36]
Спасибо!! Тебе!!!
Вот что я искал! Это ссылка с твоей первой ссылки:
http://msdn.microsoft.com/en-us/library/ms712451%28VS.85%29.aspx
Как раз HYT00 и S1T00 это одно и тоже только для разных версий ODBC
Дмитрий Тимохов (2011-04-26 15:37:00) [13]
> Вариант (26.04.11 15:01) [36]
>
>
> > Дмитрий Тимохов (26.04.11 14:03) [35]
>
Угу, спасибо. Вроде полезно!
Вариант (2011-04-26 15:01:00) [14]
> Дмитрий Тимохов (26.04.11 14:03) [35]
http://msdn.microsoft.com/en-us/library/ms716412%28VS.85%29.aspx
http://msdn.microsoft.com/en-us/library/ms714687(v=VS.85).aspx
Дмитрий Тимохов (2011-04-26 14:03:00) [15]
> Ega23 © (26.04.11 13:49) [34]
>
> Да поставь ты уже
> if Pos('timeout expired') <> 0 then Log
> :)
А лучше так:
if Pos(TranslateToEveryLanguageInTheWorld('timeout expired')) <> 0 then Log
)))
Ну я проверяю, все что могу.
Вообще просто такое несоответствие подрывает мою веру в доку.
Вообще, больная эта тема - коды ошибок.
В HTTP вроде еще ничего. А так, стройности нет как-то...
Ega23 (2011-04-26 13:49:00) [16]Да поставь ты уже
if Pos('timeout expired') <> 0 then Log
:)
Дмитрий Тимохов (2011-04-26 13:27:00) [17]Братцы... вопрос был другой. Почему в доке одно, а по факту другое и это другое я не могу найти в списке ошибок.
МНЕ НАДО в моем обработчике ошибок понимать какая ошибка произошла. МНЕ НЕ НАДО выполнять настройку timeout'а, также мне не надо бороться с ним. МНЕ НАДО только то, что я сказал.
Всё)
Ega23 (2011-04-26 11:23:00) [18]
> выполните запрос select * from SomeTable where SomeField
> like '%dfdfssd%'
> если в таблице 10000000 записей, а таймаут ADODB.Command.
> Timout равен 1 сек.
> вызове Execute свалится с сообщением timeout expired.
Дим, у тебя не капитан, случаем, звание? Естественно свалиться, к гадалке не ходи.
OW (2011-04-26 11:18:00) [19]читая Николая, и прикидывая:
если на сервере есть настройка исполнять не более стольких то, а у тебя бесконечность - тогда ты вправе ожидать ошибку из доки.
Сейчас ты сам не хочешь ждать, так почему же рассчитываешь на ошибку из доки?
OW (2011-04-26 11:12:00) [20]
> Тут вопрос нельзя свой удалить?
нет, а зачем?
мне тоже интересно, например.