文章目录
- [Qt Creator + SQL Server 入门](#Qt Creator + SQL Server 入门)
-
- [1. 准备环境](#1. 准备环境)
-
- [(1)Qt 端](#(1)Qt 端)
- [(2)SQL Server 端](#(2)SQL Server 端)
- (3)驱动
- [2. Qt 项目中引入 SQL](#2. Qt 项目中引入 SQL)
- [3. 连接 SQL Server 示例](#3. 连接 SQL Server 示例)
- [4. 注意事项](#4. 注意事项)
- [5. GUI 结合示例](#5. GUI 结合示例)
Qt Creator + SQL Server 入门
1. 准备环境
(1)Qt 端
- 安装 Qt + Qt Creator(你说用 MSVC 2022,没问题)
- 确认安装了 Qt SQL 模块 (Qt5/Qt6 默认包含
QtSql
)
(2)SQL Server 端
- 安装 SQL Server(Express/Developer 都行)
- 确认开启了 TCP/IP 协议(SQL Server 配置管理器 → 网络配置)
- 确认账号密码能正常登录(比如
sa / 123456
)
(3)驱动
Qt 访问数据库需要 ODBC 或 QODBC 驱动:
- Windows 下 SQL Server 推荐:
QODBC
- 如果用
QODBC
,要确保 Windows 已经安装了 ODBC 驱动(一般自带)
2. Qt 项目中引入 SQL
在 .pro
文件中加上:
pro
QT += sql
3. 连接 SQL Server 示例
cpp
#include <QCoreApplication>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlError>
#include <QDebug>
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
// 使用 QODBC 驱动
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
// 数据源字符串
QString dsn = QString("DRIVER={SQL Server};SERVER=%1;DATABASE=%2;UID=%3;PWD=%4;")
.arg("127.0.0.1") // SQL Server 地址
.arg("TestDB") // 数据库名
.arg("sa") // 用户名
.arg("123456"); // 密码
db.setDatabaseName(dsn);
if (!db.open()) {
qDebug() << "数据库连接失败:" << db.lastError().text();
return -1;
} else {
qDebug() << "数据库连接成功!";
}
// 查询数据
QSqlQuery query(db);
if (query.exec("SELECT TOP 5 id, name FROM Users")) {
while (query.next()) {
int id = query.value(0).toInt();
QString name = query.value(1).toString();
qDebug() << id << name;
}
} else {
qDebug() << "查询失败:" << query.lastError().text();
}
db.close();
return a.exec();
}
4. 注意事项
-
数据库驱动问题 :
如果报错
QODBC driver not loaded
,要检查 Qt 是否编译了 ODBC 插件。- 解决办法:确认
plugins/sqldrivers/qsqlodbc.dll
存在。
- 解决办法:确认
-
SQL Server 认证:
- SQL Server 默认可能只允许 Windows 身份验证,要改成 SQL Server + Windows 混合验证。
-
中文乱码问题:
- 建议数据库表字段用
NVARCHAR
,Qt 里用QString
。
- 建议数据库表字段用
5. GUI 结合示例
如果你在 Qt Widgets
里用,可以用 QTableView
直接显示:
cpp
QSqlTableModel *model = new QSqlTableModel(this, db);
model->setTable("Users");
model->select();
QTableView *view = new QTableView(this);
view->setModel(model);
view->show();
这样就能在窗口里看到数据库表格。
⚡ 推荐学习路径:
- 先用
QSqlDatabase + QSqlQuery
练习 CRUD(增删改查) - 再用
QSqlTableModel + QTableView
做 UI 显示 - 如果要嵌入式 HMI,可以通过 API 接口 转发数据库数据,而不是直接连 SQL Server