QODBC SQL超时

时间:2016-08-08 12:06:58

标签: c++ sql-server qt connection-timeout unixodbc

我在许多设备上运行C ++ QT应用程序,需要与MS SQL服务器通信。 我正在使用QODBC3(unixODBC)驱动程序。

SQL连接一旦初始化并连接,然后重复使用。多亏了这个,查询运行得很快(最多20毫秒)。

当没有连接问题时,Everythink工作正常。当网络连接丢失的时间很短时,SQL连接就无法“重新连接”。

我尝试在每次查询尝试之前检查连接是否已打开,但QSqlDatabase::isOpen()返回true,除非调用close()。网络问题后它不会改变。 在我的观点中,最好的方法是将ODBC驱动程序中的计时器设置为很短的时间,并尝试在超时关闭时重新连接。但ODBC中的超时设置为cca 15分钟,我无法设置不同的值。

SQLConnection.setConnectOptions("SQL_ATTR_CONNECTION_TIMEOUT=5");

这个命令似乎什么都没改变,我甚至试图在字符串中完成废话,但没有错误或其他什么。

我的下一次尝试是每次在运行查询之前ping服务器,但如果网络连接再次打开,则ping成立并且SQL连接仍然断开。

我的“临时”解决方案是在每次查询之前打开SQL连接,然后关闭它(在打开之前使用ping)。但是这个解决方案可以将每个查询延长到cca 500ms,我对此并不感到高兴。

我身边有四种可能的解决方案:

  • 在ODBC驱动程序中成功设置超时
  • 在QSqlDatabase以上的更高级别实现我自己的超时
  • 在尝试运行SQL查询之前检测网络问题
  • 保留临时解决方案并假装无法更改: - (

0 个答案:

没有答案