Конференция "Базы" » Код ошибки Timeout expired в MS SQL Server. [MSSQL]
 
  • sniknik © (25.04.11 20:09) [20]
    > в) Ошибки OLEDB Provider'а
    а при чем здесь тогда "ODBC Return code"?
  • Дмитрий Тимохов (26.04.11 09:33) [21]
    Да, я это понимаю, что ошибки OLEDB provider и ODBC return code разные вещи.
    На странице http://msdn.microsoft.com/en-us/library/aa937531%28SQL.80%29.aspx сказано, что эти пятизначные коды вообще коды из SQL-92.

    Выдача по твоему коду такая
    EOleException : Timeout expired
    EOleException.ErrorCode : -21472178710:
    -2147217871 : Timeout expired

  • Дмитрий Тимохов (26.04.11 09:37) [22]
    вернее не так, ошибся

    EOleException : Timeout expired
    EOleException.ErrorCode : -2147217871
    0: -2147217871 : Timeout expired

  • Дмитрий Тимохов (26.04.11 09:38) [23]
    -2147217871 - это

    //
    // MessageId: DB_E_ABORTLIMITREACHED
    //
    // MessageText:
    //
    //  Execution aborted because a resource limit has been reached; no
    //  results have been returned
    //
     DB_E_ABORTLIMITREACHED               = HResult($80040E31);
     {$EXTERNALSYM DB_E_ABORTLIMITREACHED}


    из "c:\Program Files\CodeGear\RAD Studio\5.0\source\Win32\db\OleDB.pas"
  • Дмитрий Тимохов (26.04.11 09:40) [24]
    Я вообще к чему... В NativeError и ErrorCode нет информации о timeout expired (кроме Description, конечно). Т.е. по кодам ошибок нельзя однозначно понять, что случился timeout.

    Надо анализировать, я полагаю, SQLState. Но тут нестыковка - MSDN сказан один код, а по факту другой.

    Я с вопросом повторяюсь уже - виноват. Но хочу просто акцентировать внимание на сути вопроса. Вот.
  • sniknik © (26.04.11 10:07) [25]
    > Т.е. по кодам ошибок нельзя однозначно понять, что случился timeout.
    > ... IntToStr(Number {-2147217871}) ...

    > вернее не так, ошибся
    > EOleException : Timeout expired
    > EOleException.ErrorCode : -2147217871
    > 0: -2147217871 : Timeout expired

    ну прям жуткая неоднозначность... везде разный код... (сарказм).
    не ошибайся, и все.

    > на сути вопроса.
    какой  сути? таймаут означает что ответа не дождались так? т.е. ты туда АУ!, а ответ тишина... долго, долго, надоело = таймаут.
    почему ты ждешь расшифровки ошибки от сервера (или кого? ODBC который просто рядом где то, может быть... а может и не установлен) если он/в случае когда не отвечает?
    та ошибка на которую ты "упираешь" это таймаут в выполнении чего то самим сервером/ODBC (пофигу от кого, т.к. не использую), а смотришь на таймаут от сервера. разница однако.

    чтобы получить "ту" сделай в запросе длительное обращение куда нибудь "вне", например в другой сервер, а в компонентах поставь 0 (ждать до упора).

    > Надо анализировать, я полагаю, SQLState
    т.е. неважно, что это ODBC (у которого тоже есть таймауты на выполнение чего то), т.е. 3й вариант... (ODBC это вообще набор функций, по сути, ответ который OLEDB скорее всего преобразует к своему виду) ты работаешь прямо с dll-ками ODBC?
    и говоришь
    > Да, я это понимаю ...
    и тем не менее "полагаешь". ну так полагай дальше, зачем нас спрашивать, если сам "лучше всех знаешь"?
  • OW © (26.04.11 10:46) [26]
    тоже не понимаю немного
    timeout  - это твое решение, т.е. ты, клиент, перестал ждать.
    Чего же мы хотим тогда от сервера?
  • Дмитрий Тимохов (26.04.11 10:47) [27]
    не туда все зашло как-то.

    вопрос решил, проверяю все коды, которые удалось получить ПЛЮС S1T00, который прописан в MSDN.

    вопросов больше не имею.
  • Дмитрий Тимохов (26.04.11 10:49) [28]
    офигеть )))

    выполните запрос select * from SomeTable where SomeField like '%dfdfssd%'

    если в таблице 10000000 записей, а таймаут ADODB.Command.Timout равен 1 сек.

    вызове Execute свалится с сообщением timeout expired.

    меня интересует одно - как по кодам ошибок понять, что это именно timeout expired. наиболее подходящее SQLState, возможные варианты которого вроде как прописаны в SQL-92.

    меня удивляет почему доке одна ошибка, а по факту другая.

    все...

    Тут вопрос нельзя свой удалить?
  • OW © (26.04.11 11:11) [29]

    > меня интересует одно - как по кодам ошибок понять, что это
    > именно timeout expired. наиболее подходящее SQLState, возможные
    > варианты которого вроде как прописаны в SQL-92.
    >
    > меня удивляет почему доке одна ошибка, а по факту другая.
    >
    > все...


    говорю же

    ты позвонил на справочную, спросил номер загса/морга и сразу повесил трубку.


    > timeout  - это твое решение, т.е. ты, клиент, перестал ждать.

    и что должен тебе сказать сервер?
  • OW © (26.04.11 11:12) [30]

    > Тут вопрос нельзя свой удалить?

    нет, а зачем?
    мне тоже интересно, например.
  • OW © (26.04.11 11:18) [31]
    читая Николая, и прикидывая:
    если на сервере есть настройка исполнять не более стольких то, а у тебя бесконечность - тогда ты вправе ожидать ошибку из доки.
    Сейчас ты сам не хочешь ждать, так почему же рассчитываешь на ошибку из доки?
  • Ega23 © (26.04.11 11:23) [32]

    > выполните запрос select * from SomeTable where SomeField
    > like '%dfdfssd%'
    > если в таблице 10000000 записей, а таймаут ADODB.Command.
    > Timout равен 1 сек.
    > вызове Execute свалится с сообщением timeout expired.


    Дим, у тебя не капитан, случаем, звание? Естественно свалиться, к гадалке не ходи.
  • Дмитрий Тимохов (26.04.11 13:27) [33]
    Братцы... вопрос был другой. Почему в доке одно, а по факту другое и это другое я не могу найти в списке ошибок.

    МНЕ НАДО в моем обработчике ошибок понимать какая ошибка произошла. МНЕ НЕ НАДО выполнять настройку timeout'а, также мне не надо бороться с ним. МНЕ НАДО только то, что я сказал.

    Всё)
  • Ega23 © (26.04.11 13:49) [34]
    Да поставь ты уже
    if Pos('timeout expired') <> 0 then Log
    :)
  • Дмитрий Тимохов (26.04.11 14:03) [35]

    > Ega23 ©   (26.04.11 13:49) [34]
    >
    > Да поставь ты уже
    > if Pos('timeout expired') <> 0 then Log
    > :)


    А лучше так:
    if Pos(TranslateToEveryLanguageInTheWorld('timeout expired')) <> 0 then Log

    )))

    Ну я проверяю, все что могу.

    Вообще просто такое несоответствие подрывает мою веру в доку.
    Вообще, больная эта тема - коды ошибок.

    В HTTP вроде еще ничего. А так, стройности нет как-то...
  • Вариант (26.04.11 15:01) [36]
  • Дмитрий Тимохов (26.04.11 15:37) [37]

    > Вариант   (26.04.11 15:01) [36]
    >
    >
    > > Дмитрий Тимохов   (26.04.11 14:03) [35]
    >


    Угу, спасибо. Вроде полезно!
  • Дмитрий Тимохов (26.04.11 15:40) [38]

    > Вариант   (26.04.11 15:01) [36]


    Спасибо!! Тебе!!!

    Вот что я искал! Это ссылка с твоей первой ссылки:

    http://msdn.microsoft.com/en-us/library/ms712451%28VS.85%29.aspx

    Как раз HYT00 и S1T00 это одно и тоже только для разных версий ODBC
  • Дмитрий Тимохов (26.04.11 16:08) [39]
    ЕЩЕ ВОПРОС

    Задаю тут, т.к. новый вопрос в общем связан с топиком.

    Вопрос несколько общий.

    ВОПРОС 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?
 
Конференция "Базы" » Код ошибки Timeout expired в MS SQL Server. [MSSQL]
Есть новые Нет новых   [134431   +15][b:0][p:0.001]