• Qt 连接并使用 SQL Sever数据库


    Qt 连接 SQL Sever数据库

    记录详细的连接 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54

    二、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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    3、主函数文件

    //main.cpp
    #include 
    #include 
    #include 
    #include 
    #include 
    
    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()<
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    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"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

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

  • 相关阅读:
    通过Go语言创建CA与签发证书
    智慧餐饮系统架构的设计与实现
    SSL证书的加密算法有哪些?
    使用sersync实现数据实时同步
    如何实现车机体验”遥遥领先”?头部玩家已经给出答案
    Toronto Research Chemicals单羟基舒更葡糖钠说明书
    『力扣刷题本』:链表分割
    基于Springboot的影城管理系统(有报告)。Javaee项目,springboot项目。
    什么是Hystrix?简述实现机制
    操作系统的结构设计怎么搞?带你理解理解
  • 原文地址:https://blog.csdn.net/Bejpse/article/details/126113952