Вы упомянули, что пытались отследить случайную проблему тайм-аута. У меня было то же самое, обычно, когда я делал SELECT, который возвращал много строк. Две вещи:
Cnn.CursorLocation = ADODB.adUseServer
(Другой вариант - adUseClient) - я считаю, что adUseServer дал мне более быстрые запросы, что уменьшило вероятность тайм-аутов. Я полагаю, вы делаете это до того, как открываете соединение.
Cnn.CommandTimeout = 0
Также перед open () сообщает, что вы хотите бесконечное время ожидания. Я думаю, что время ожидания по умолчанию составляет около 30 с, что было слишком мало для некоторых запросов. CommandTimeout будет использоваться для запросов набора записей. Если вы используете объект Command, у него есть собственный член CommandTimeout, который, по-видимому, не наследуется от соединения (т. Е. Я устанавливаю его до выполнения команды).
Извините, если синтаксис не совсем правильный, я вырезал из кода C ++.