CommandTimeout
включается, когда у вас есть долго выполняющиеся запросы. Есть свойство CommandTimeout
TADOConnection
, но оно не работает. Вместо этого вы должны использовать CommandTimeout
из TADODataSet
.
Если сервер недоступен, в вашем вопросе говорится «соединение потеряно», вам необходимо указать ConnectionTimeout
компонента TADOConnection
. По умолчанию это 15 секунд, прежде чем контроль возвращается в ваше приложение.
Редактировать 1 Мне кажется, я обнаружил ситуацию, когда CommandTimeout не работает. Я проверил это на действительно большом столе. Требуется несколько минут, чтобы вернуть все строки. Если моя хранимая процедура делает select * from BigTable
, тайм-аут запроса никогда не происходит. По крайней мере, я не был достаточно терпелив, чтобы ждать. Но если запрос выглядит следующим образом select * from BigTable order by Col1
, а индекс Col1
отсутствует, CommandTimout работает, как и ожидалось.
Разница между этими двумя запросами очевидна при запуске их в SSMS. Первый начинает немедленно возвращать строки, а второй должен «подумать» об этом, прежде чем он вернет строки. Когда SQL Server обнаружил нужные строки и начал их возвращать, CommandTimeout не работает.
Если вы установите CursorLocation
на clUseServer
, CommandTimeout
будет работать, как и ожидалось, для обоих запросов.