QODBC SQL timeout

У меня есть приложение C ++ QT, работающее на многих устройствах, которое должно взаимодействовать с сервером MS SQL.
Я использую драйвер QODBC3 (unixODBC).

Соединение SQL один раз инициализируется и подключается, а затем используется повторно. Благодаря этому запрос выполняется быстро (максимум 20 мс).

Everythink отлично работает, когда нет проблем с подключением. Когда сетевое соединение потеряно даже на короткое время, соединение SQL не может «переподключиться».

Я пытался проверить, включено ли соединение перед каждой попыткой запроса, но QSqlDatabase::isOpen() возвращает истину, если close() называется. Не меняется после проблем с сетью.
По моему мнению, лучшим способом было бы установить таймер в драйвере ODBC на некоторое короткое время и попытаться восстановить соединение, когда истечет время ожидания. Но время ожидания в ODBC установлено равным приблизительно 15 минутам, и я не смог установить другое значение.

SQLConnection.setConnectOptions("SQL_ATTR_CONNECTION_TIMEOUT=5");

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

Моя следующая попытка состояла в том, чтобы пинговать сервер каждый раз перед запуском запроса, но если сетевое соединение снова включается, пинг сбрасывается, а соединение SQL по-прежнему разрывается.

Мое «временное» решение состоит в том, чтобы открывать соединение SQL перед каждым запросом, а затем закрывать его (с пингом перед открытием). Но это решение продлевает каждый запрос до 500 мс, и я не очень доволен этим.

Четыре возможных решения с моей стороны:

  • Успешно установлен тайм-аут в драйвере ODBC
  • Реализовать мой собственный тайм-аут на более высоком уровне выше QSqlDatabase
  • Обнаружение проблем с сетью, прежде чем пытаться выполнить запрос SQL
  • Сохраните временное решение и сделайте вид, что его нельзя изменить 🙁

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector