如何在 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 => ("QIBASE", "QSQLITE", "QSQLITE3", "Qmysql3", "QMYSQL", "QODBC3", "QODBC", "QPSQL7", "QPSQL", "QTDS7", "QTDS") ERRORR MESSAGE: => "[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?的主要内容,如果未能解决你的问题,请参考以下文章