轻松实现QT直连Microsoft SQL Server

1. 前言

QT作为一款跨平台的C++应用程序开发框架,为我们提供了丰富的功能和便捷的开发方式。而与之搭配使用的数据库也是非常重要的一部分,能够为我们的开发带来不少便利。Microsoft SQL Server作为一款功能强大的关系型数据库管理系统,被广泛地应用于企业级应用,这里介绍一下如何在QT中直连Microsoft SQL Server。

2. 准备工作

2.1 下载ODBC驱动

由于Microsoft SQL Server是一款关系型数据库,所以我们需要下载ODBC驱动程序。ODBC是一种面向应用程序的数据库中间件技术,可以将不同的数据库连接到应用程序中。在Windows平台下,ODBC是系统自带的。我们只需要在ODBC数据源管理器(在控制面板中)中添加对应的ODBC驱动即可。而在Linux平台下则需要在终端输入以下命令安装ODBC驱动:

sudo apt-get install unixodbc unixodbc-dev

sudo apt-get install libodbc1 libodbc1-dev

2.2 安装Microsoft SQL Server

如果我们本机没有安装Microsoft SQL Server的话,需要下载并安装。可以从官网上下载对应版本的Microsoft SQL Server,也可以选择通过Docker来安装。

3. 创建QT项目

在QT Creator中创建一个新项目,选择“Qt Widgets应用程序”类型。为了方便起见,我们可以将界面设计为QPushButton按钮和QTableWidget表格控件。在设计好所需界面后,我们需要在.pro文件中添加相应的库文件。以下是我们需要添加的库文件:

QT += core gui

QT += sql // 添加sql库

QT += widgets

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

# MySQL library

INCLUDEPATH += C:/Program Files/Microsoft SQL Server/ODBC Driver 17 for SQL Server/include

LIBS += -LC:/Program Files/Microsoft SQL Server/ODBC Driver 17 for SQL Server/lib64 \

-lodbc32 \

-luser32 \

-lgdi32 \

-lwinspool \

-lcomdlg32 \

-ladvapi32 \

-lshell32 \

-lole32 \

-loleaut32 \

-lnetapi32 \

-luuid \

-lws2_32 \

-lmpr \

-lwinmm \

-lversion \

-lodbc32.lib \

-loleaut32.lib

4. 连接数据库

4.1 建立连接

在程序运行过程中需要与Microsoft SQL Server建立连接,在“mainwindow.cpp”文件中添加以下代码段:

QString dsn = "driver={ODBC Driver 17 for SQL Server};server=localhost;database=test;uid=sa;pwd=12345678";

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");

db.setPort(1433); // 设置端口

db.setDatabaseName(dsn);

bool ok = db.open();

if(!ok) {

qDebug() << db.lastError().text();

QMessageBox::warning(this, "", "Database Connection Failed!");

}

else {

qDebug() << "连接成功!" << endl;

}

4.2 查询数据

连接数据库成功后,我们就可以对数据库中的数据进行操作了。下面我们以查询数据库中所有数据并显示在表格中为例:

QString sql = "SELECT * FROM test";

QSqlQuery query;

query.exec(sql);

while (query.next()) {

int id = query.value(0).toString();

QString name = query.value(1).toString();

QString gender = query.value(2).toString();

double score = query.value(3).toDouble();

ui->tableWidget->insertRow(ui->tableWidget->rowCount()); // 插入新行

ui->tableWidget->setItem(ui->tableWidget->rowCount()-1, 0, new QTableWidgetItem(QString::number(id)));

ui->tableWidget->setItem(ui->tableWidget->rowCount()-1, 1, new QTableWidgetItem(name));

ui->tableWidget->setItem(ui->tableWidget->rowCount()-1, 2, new QTableWidgetItem(gender));

ui->tableWidget->setItem(ui->tableWidget->rowCount()-1, 3, new QTableWidgetItem(QString::number(score)));

}

5. 结束语

本文就是介绍了如何在QT中直接连接Microsoft SQL Server,希望本文能够帮助到大家。如有不足之处,请多多指教。

数据库标签