如何在 QT[C++] 中从 linux 机器连接 SQL Server 2008 R2?

Posted

技术标签:

【中文标题】如何在 QT[C++] 中从 linux 机器连接 SQL Server 2008 R2?【英文标题】:How to connect SQL Server 2008 R2 from linux machine in QT[C++]? 【发布时间】:2017-01-09 13:54:48 【问题描述】:

我正在尝试从我的 Linux 机器连接 Windows 机器上的 SQL Server R2。我无法连接 SQL Server。

我的数据库连接代码不适合我:

#include <QtCore/QCoreApplication>
#include<QtSql>
int main(int argc, char *argv[])

   QCoreApplication a(argc, argv);
   QSqlDatabase db = QSqlDatabase::addDatabase("QODBC3");
   db.setDatabaseName("DRIVER=SQL Server;Server=192.162.1.108;Database=WIN-UK71JUGMM8T;Uid=sa;Port=1433;Pwd=sa@123;WSID=.");
   db.open();
   if(!db.open())
    
        qDebug()<<"ERRORR MESSAGE: =>" << db.lastError().text();
        return 0;
    
    return a.exec();

它给了我以下错误:

ERRORR MESSAGE: => "[unixODBC][Driver Manager]Data source name not found, and no default driver specified QODBC3: Unable to connect" 

我的 .pro 文件:

QT       += core sql
QT       -= gui
TARGET   = SQLTest
CONFIG   += console
CONFIG   -= app_bundle
TEMPLATE  = app
SOURCES  += main.cpp

如果想在WINDOWS机器上做一些程序,请告诉我。

【问题讨论】:

【参考方案1】:

您的代码大部分看起来都很好。这与我自己的 SQL Server 客户端应用程序相同。但可能会有一些错误:

编辑:您混淆了 IP 和数据库名称。正如您的screenshot 向我展示的那样,您的主机是“WIN-UK71JUGMM8T”。 “数据库”字段对应于您要在“数据库”子文件夹中打开的数据库。

主持人:

WIN-UK71JUGMM8T\SQLEXPRESS

连接字符串

db.setDatabaseName("DRIVER=SQL Server;Server=WIN-UK71JUGMM8T\SQLEXPRESS;Database='Your DB Name';Uid=sa;Port=1433;Pwd=sa@123;WSID=.");

对于驱动程序,您应该使用QODBC 而不是QODBC3。 Qt 应该选择正确的,你不应该指定版本号。

其他错误是你的db.open(),你只需要在if语句中就可以了

db.open(); //Remove this line, as you call it in your if statement
if(!db.open())

    qDebug()<<"ERRORR MESSAGE: =>" << db.lastError().text();
    return 0;

一个好的做法是列出可用的驱动程序:

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
qDebug() << db.drivers();

【讨论】:

谢谢先生,请检查我的更改 进行更改后,它会给出相同的错误,如下所示:DRIVERS =&gt; ("QIBASE", "QSQLITE", "QSQLITE3", "Qmysql3", "QMYSQL", "QODBC3", "QODBC", "QPSQL7", "QPSQL", "QTDS7", "QTDS") ERRORR MESSAGE: =&gt; "[unixODBC][Driver Manager]Data source name not found, and no default driver specified QODBC3: Unable to connect" 是否需要在我的 linux 机器上安装一些驱动程序?用于连接它们或任何配置更改? Beauce 我可以用 JAVA 连接,但不能用 QT c++ 通过“驱动程序”,Qt 表示他自己的 dll(在 Qt 安装文件夹中找到),在 sqldrivers 文件夹中,或者如果您在 Linux 上运行,则表示 libs。它们是 Qt 特有的,不需要单独安装。尝试删除端口,因为 documentation 没有指定它 我找到了答案。我将 QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); 更改为 QSqlDatabase db = QSqlDatabase::addDatabase("QTDS"); 它对我有用

以上是关于如何在 QT[C++] 中从 linux 机器连接 SQL Server 2008 R2?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 QT C++ 中从表的列中获取 SQL 中的所有值

如何在 Qt 中从服务器向连接的客户端发送消息

使用 Pywinrm 在远程 Windows 机器中从 linux 执行 vbs 脚本(执行双跳)

在 C++ 中从 qt 获取 Android 帐户管理器

如何连接两个程序(c++,qt)

在 linux 中从 qt creator 运行 lupdate 和 lrelease 命令