2401_85118654 2024-12-04 16:12 采纳率: 0%
浏览 61
已结题

linux下上位机直连SQL SERVER报错,如何解决?(Qt)(相关搜索:数据库)

已经生成odbc库文件了,但是运行程序报错,如下图

img


源代码就是一段测试数据库连接的程序。本人linux初学者,求指导详细解决方法。

  • 写回答

23条回答 默认 最新

  • 叫兽-郭老师 新星创作者: Java技术领域 2024-12-05 10:39
    关注

    🕖上午好,题主!目前:🟢[在线]
    📢参考通义千问、由郭老师整理提供!
    📣今日诗号:二十四桥明月夜,玉人何处教吹箫。

    要解决Linux下使用Qt连接SQL Server的问题,你需要确保几个关键点得到正确配置和安装:

    1. 安装必要的库

      • unixODBCunixODBC-dev 是必须的,它们提供了ODBC接口。
      • freetds 是一个开源库,它提供了与SQL Server和其他数据库的兼容性。确保安装了最新版本。
      • unixODBC 配置文件需要正确配置,指向freetds
    2. 配置ODBC

      • 确保/etc/odbcinst.ini文件中正确配置了SQL Server驱动。示例如下:
        [FreeTDS]
        Description=FreeTDS Driver for Linux
        Driver=/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
        Setup=/usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
        UsageCount=1
        
      • /etc/odbc.ini 文件也需要配置以指向你的SQL Server实例。示例如下:
        [MSSQLSERVER]
        Description=Test DSN
        Driver=FreeTDS
        TDS_Version=7.4
        Server=myserver.example.com
        Port=1433
        Database=mydatabase
        
    3. Qt配置

      • 在Qt中,你需要正确地设置ODBC连接字符串。示例如下:
        QString dsn = "MSSQLSERVER"; // 对应/etc/odbc.ini中的DSN名称
        QString dbUser = "yourusername";
        QString dbPassword = "yourpassword";
        
        QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
        db.setDatabaseName(QString("DRIVER={FreeTDS};DSN=%1;UID=%2;PWD=%3").arg(dsn).arg(dbUser).arg(dbPassword));
        
        if (!db.open()) {
            qDebug() << "Error: connection with database failed" << db.lastError();
        } else {
            qDebug() << "Database: connection ok";
        }
        
    4. 检查防火墙和网络配置

      • 确保Linux服务器上的防火墙允许从你的应用程序所在的主机到SQL Server的端口(通常是1433)的流量。
    5. 错误排查

      • 如果遇到连接错误,请检查错误消息以获取更多信息,并查看SQL Server的日志文件以了解可能的原因。

    通过以上步骤,你应该能够解决Linux下使用Qt连接SQL Server的问题。如果仍然有问题,考虑查看具体的错误消息,这通常会提供解决问题的重要线索。此外,确保所有软件都是最新的,因为旧版本可能会有已知的问题。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月12日
  • 赞助了问题酬金15元 12月5日
  • 创建了问题 12月4日