You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

断开重连后仅出现SQL_HANDLE_HENV获取失败错误的求助

ODBC连接SQLServer异常问题

我找到过几个带有相同错误的类似问题,但那些问题都是因库或配置错误导致完全无法连接数据库,和我的情况不同。

我的情况是:可以正常连接远程SQL Server数据库,但当远程主机断开并重新上线后,会出现以下错误:

[unixODBC][Driver Manager]Driver's SQLAllocHandle on SQL_HANDLE_HENV failed
只有重启应用才能恢复连接。

以下是我的数据库连接代码:

bool OdbcSql::connectToDB(QUrl host, QString database, QString username, QString password)
{
    _host = host;
    _database = database;
    _username = username;
    _password = password;

    if (_db.isOpen()) _db.close();
    _db.removeDatabase("production");
    _db = QSqlDatabase::addDatabase("QODBC", "production");

    qInfo() << ID << "Trying to open database...";
    _db.setDatabaseName(QStringLiteral("Driver=/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.2.so.1.1; Server=%1;Database=%2; Encrypt=No;").arg(host.url()).arg(database));
    _db.setUserName(username);
    _db.setPassword(password);
    _db.setConnectOptions("SQL_ATTR_CONNECTION_TIMEOUT=5;SQL_ATTR_LOGIN_TIMEOUT=5;SQL_ATTR_CONNECTION_POOLING=SQL_CP_OFF;");

    bool ret = _db.open();
    if (ret) qInfo() << ID << "Database opened successfully";
    else qWarning() << ID << "Database opening failed:" << _db.lastError();

    return ret;
}

我的运行环境:Ubuntu 22.04、Qt 6.4.0,ODBC驱动为libmsodbcsql-18.2。

更新:问题复现完整步骤

  • 启动应用程序
  • 远程主机不可用(离线)
  • 连接因登录超时失败
  • 每分钟调用上述connectToDB函数重试连接
  • 远程主机上线,连接成功且可正常使用
  • 一段时间后远程主机再次离线
  • 检测到连接丢失(检测代码如下)
  • 每分钟重试连接,但均因登录超时失败
  • 远程主机重新上线,出现SQL_HANDLE_HENV错误
  • 仅重启应用程序才能重新连接

连接检测代码:

bool OdbcSql::checkConnectivity()
{
    if (!_isConnected) return false;
    if (_db.transaction())
    {
        _db.rollback();
        return true;
    }
    else
    {
        _isConnected = false;
        _db.close();
        qWarning() << ID << "Lost connection to database";
        return false;
    }
}

无法使用QSqlDatabase::isOpen()检测连接状态,因为它无法返回连接的实际状态,这段检测代码来自Stack Overflow和Qt论坛。

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 19:49:58