Qt 连接 SQL Sever数据库

  • 环境
  • 一、配置 ODBC数据源
    • 一、在SQL Sever Manger中添加 新的用户
      • 1. 打开如下自带的 MSS Management Studio
      • 2、登录时选择 Windows 身份验证
      • 3、去往 安全性-登录名 ,鼠标右键 新建登录名
      • 4、在 常规 中,选择 SQL Sever 身份验证并输入 自定义的用户名和密码;
      • 5、在用户映射中 选择需要映射的数据库和用户名
      • 6、在状态中 将如下选项选择 授予 启用 状态
      • 7、在 Navicat 中测试连接
      • 8、主机名获取
      • 9、配置主机
    • 二、配置ODBC数据源
      • 1、打开ODBC数据源
      • 2、添加SQL Sever 数据源
      • 3、配置数据源描述
      • 4、选择用户名登录
      • 5、测试数据源
      • 6、浏览创建的数据源 【czyTest】
  • 二、数据库连接连接
    • 一、数据库 sql 代码【含创建表和插入数据】
    • 二、Qt C++代码
      • 1、工程目录
      • 2、工程文件
      • 3、主函数文件
      • 4、运行结果

记录详细的连接 SQL Sever数据库的使用全过程

环境

  • 系统: Windows 10 专业版
  • Qt版本: Qt 5.14.2 【编译套件 MinGW 32】
  • SQL Sever:SQL Sever 2019
  • 编程语言:C++

一、配置 ODBC数据源

一、在SQL Sever Manger中添加 新的用户

1. 打开如下自带的 MSS Management Studio

2、登录时选择 Windows 身份验证

3、去往 安全性-登录名 ,鼠标右键 新建登录名

4、在 常规 中,选择 SQL Sever 身份验证并输入 自定义的用户名和密码;

【可以选上 默认数据库是哪一个需要用的数据库】

5、在用户映射中 选择需要映射的数据库和用户名

【确保 db_owner 勾选,否则能连接数据库,但是不能数据库 增删改查 操作】

6、在状态中 将如下选项选择 授予 启用 状态

7、在 Navicat 中测试连接

在连接中如下输入【主机名】【初始化数据库可以忽略】
[不知道主机名的可以看第 8 条记录]

连接成功

  • 若出现连接失败【可以试一下 重置 czy 的密码(可为原密码)】

8、主机名获取

在开始按钮中找到 如下软件

在如下可以看到服务器主机

若没有
可以参考 [第 9 条 ]如下配置

9、配置主机

一、在SQL Sever 网络配置中 确保 TCP/IP 已启用,里面参数默认即可

双击 TCP/IP 在IP地址栏中能查看服务器的IP地址 以及端口, 当然也可以配置端口,我选择默认

二、SQL Native Client 配置中 别名 新建别名,

我创建了一个 localhost 的别名

三、在Navicat 中测试连接

二、配置ODBC数据源

1、打开ODBC数据源

2、添加SQL Sever 数据源

如下图配置

3、配置数据源描述

选择我们刚刚创建的 localhost 服务器

4、选择用户名登录

使用刚刚创建的 czy 账户

后面没啥变化就直接下一步

5、测试数据源


数据源测试成功

6、浏览创建的数据源 【czyTest】

二、数据库连接连接

一、数据库 sql 代码【含创建表和插入数据】

【可能需要删除部分代码,请自行删减】

-- ----------------------------
-- Table structure for LoginHistory_TB
-- ----------------------------
CREATE TABLE [dbo].[LoginHistory_TB] (
  [ID] int  NULL,
  [LoginName] nvarchar(254) COLLATE Chinese_PRC_CI_AS  NULL,
  [LoginTime] nvarchar(254) COLLATE Chinese_PRC_CI_AS  NULL,
  [LogoutTime] nvarchar(254) COLLATE Chinese_PRC_CI_AS  NULL,
  [Operation] int  NULL
)
GO

ALTER TABLE [dbo].[LoginHistory_TB] SET (LOCK_ESCALATION = TABLE)
GO


-- ----------------------------
-- Records of LoginHistory_TB
-- ----------------------------
INSERT INTO [dbo].[LoginHistory_TB] ([ID], [LoginName], [LoginTime], [LogoutTime], [Operation]) VALUES (N'1', N'卫雪', N'2021/1/8-08:32:49', N'2021/1/8-12:32:49', N'1111')
GO

INSERT INTO [dbo].[LoginHistory_TB] ([ID], [LoginName], [LoginTime], [LogoutTime], [Operation]) VALUES (N'2', N'夹谷利', N'2021/1/8-08:32:50', N'2021/1/8-12:32:50', N'11')
GO

INSERT INTO [dbo].[LoginHistory_TB] ([ID], [LoginName], [LoginTime], [LogoutTime], [Operation]) VALUES (N'3', N'牧彩', N'2021/1/8-08:32:61', N'2021/1/8-12:32:51', N'1')
GO

INSERT INTO [dbo].[LoginHistory_TB] ([ID], [LoginName], [LoginTime], [LogoutTime], [Operation]) VALUES (N'4', N'祖燕', N'2021/1/8-08:32:62', N'2021/1/8-12:32:52', N'111')
GO

INSERT INTO [dbo].[LoginHistory_TB] ([ID], [LoginName], [LoginTime], [LogoutTime], [Operation]) VALUES (N'5', N'傅智祥', N'2021/1/8-08:32:53', N'2021/1/8-12:32:53', N'111')
GO

INSERT INTO [dbo].[LoginHistory_TB] ([ID], [LoginName], [LoginTime], [LogoutTime], [Operation]) VALUES (N'6', N'金孝伯', N'2021/1/8-08:35:54', N'2021/1/8-12:32:54', N'1')
GO

INSERT INTO [dbo].[LoginHistory_TB] ([ID], [LoginName], [LoginTime], [LogoutTime], [Operation]) VALUES (N'7', N'谷宰玉媛', N'2021/1/8-08:35:55', N'2021/1/8-12:32:55', N'1111')
GO

INSERT INTO [dbo].[LoginHistory_TB] ([ID], [LoginName], [LoginTime], [LogoutTime], [Operation]) VALUES (N'8', N'冀韵', N'2021/1/8-08:32:56', N'2021/1/8-12:32:56', N'1')
GO

INSERT INTO [dbo].[LoginHistory_TB] ([ID], [LoginName], [LoginTime], [LogoutTime], [Operation]) VALUES (N'9', N'夹谷利', N'2021/1/8-08:32:57', N'2021/1/8-12:32:57', N'1')
GO

INSERT INTO [dbo].[LoginHistory_TB] ([ID], [LoginName], [LoginTime], [LogoutTime], [Operation]) VALUES (N'10', N'牧彩', N'2021/1/8-08:32:58', N'2021/1/8-12:32:58', N'1111')
GO

INSERT INTO [dbo].[LoginHistory_TB] ([ID], [LoginName], [LoginTime], [LogoutTime], [Operation]) VALUES (N'11', N'祖燕', N'2021/1/8-08:32:59', N'2021/1/8-12:32:59', N'11')
GO

INSERT INTO [dbo].[LoginHistory_TB] ([ID], [LoginName], [LoginTime], [LogoutTime], [Operation]) VALUES (N'12', N'祖燕', N'2021/1/8-08:33:00', N'2021/1/8-12:32:00', N'1111')
GO

二、Qt C++代码

1、工程目录

2、工程文件

QT -= gui
QT += sql core

CONFIG += c++11 console
CONFIG -= app_bundle

DEFINES += QT_DEPRECATED_WARNINGS

SOURCES += 
    main.cpp

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

3、主函数文件

//main.cpp
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>

int main(int argc, char *argv[])
{
    //数据库配置
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    db.setHostName("localhost");         // 服务器名称
    db.setDatabaseName("czyTest");       // 数据源名称
    db.setUserName("czy");               // 用户名
    db.setPassword("202128you");         // 密码

    //数据库连接
    bool ok = db.open();
    if(ok)
    {
        qDebug()<<"DataBase open sucess!";
    }
    else {
        qDebug()<<db.lastError();
    }

    //数据库查询
    QSqlQuery query("SELECT * FROM LoginHistory_TB;");
    qDebug()<<"ID     LoginName        LoginTime                LogoutTime        OPeration";
    while (query.next()) 
    {
        int ID = query.value(0).toInt();
        QString LoginName = query.value(1).toString();
        QString LoginTime = query.value(2).toString();
        QString LogoutTime = query.value(3).toString();
        int OPeration = query.value(4).toInt();

        qDebug()<<QString("%1       %2       %3         %4      %5")
                  .arg(ID).arg(LoginName).arg(LoginTime).arg(LogoutTime).arg(OPeration);
    }

    //数据库关闭
    db.close();
    return 0;
}

4、运行结果

DataBase open sucess!
ID     LoginName        LoginTime                LogoutTime        OPeration
"1       卫雪       2021/1/8-08:32:49         2021/1/8-12:32:49      1111"
"2       夹谷利       2021/1/8-08:32:50         2021/1/8-12:32:50      11"
"3       牧彩       2021/1/8-08:32:61         2021/1/8-12:32:51      1"
"4       祖燕       2021/1/8-08:32:62         2021/1/8-12:32:52      111"
"5       傅智祥       2021/1/8-08:32:53         2021/1/8-12:32:53      111"
"6       金孝伯       2021/1/8-08:35:54         2021/1/8-12:32:54      1"
"7       谷宰玉媛       2021/1/8-08:35:55         2021/1/8-12:32:55      1111"
"8       冀韵       2021/1/8-08:32:56         2021/1/8-12:32:56      1"
"9       夹谷利       2021/1/8-08:32:57         2021/1/8-12:32:57      1"
"10       牧彩       2021/1/8-08:32:58         2021/1/8-12:32:58      1111"
"11       祖燕       2021/1/8-08:32:59         2021/1/8-12:32:59      11"
"12       祖燕       2021/1/8-08:33:00         2021/1/8-12:32:00      1111"

先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

更多推荐

Qt 连接并使用 SQL Sever数据库