Qt SQLServerHelper 用QSqlQuery 和 QSqlDatabase 实现

QT 连Sqlserver(以SQL Server Native Client方式) /连接 SQL Server 可以使用 Microsoft 提供的 SQL Server Native Client 驱动程序。//其中,"server_name" 是 SQL Server 的主机名或 IP 地址,"db_name" 是要连接的数据库名称,//在连接成功后,可以使用 "QSqlQuery" 对象执行 SQL 查询语句并处理查询结果。//"user_name" 和 "password" 是连接数据库的用户名和密码。//3. 连接 SQL Server 数据库。 阅读详情

在网上找了很多SQLServer的封装类, 自己重新实现了一下


参考的网址:

这个是一个数据库操作的类, 包含基本的打开关闭curd

点击打开链接

这个是参考实现count, 在迭代器里增加了一个int变量用于计数

点击打开链接


Qt版本 4.8.6

1. 文档结构


2. .pro

这里要增加 Qt += sql 

#-------------------------------------------------
#
# Project created by QtCreator 2018-06-12T10:23:08
#
#-------------------------------------------------

QT       += core

QT       -= gui

QT       += sql

TARGET = SQLServerDemo
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += main.cpp \
    sqlserverhelper.cpp

HEADERS += \
    sqlserverhelper.h


3. main.cpp

这里实现的功能是查询计数和插入记录

#include <QtCore/QCoreApplication>
#include "sqlserverhelper.h"
#include <QDebug>

void SQLServerTest()
{
    SQLServerHelper *sqlServerHelper = new SQLServerHelper();
    sqlServerHelper->open();

    
    QString sqlCommand = "SELECT * FROM DeviceStatus WHERE DeviceCode = '001'";
    int count = sqlServerHelper->count(sqlCommand);
    qDebug() << count;

    
    sqlCommand =
            "INSERT INTO [dbo].[DeviceStatus]([DeviceCode], [DeviceStaTime], [DeviceStaCode], [DeviceErrCode]) VALUES ('004', '', '001', '');";
    int result = sqlServerHelper->query(sqlCommand);
    qDebug() << result;

    sqlServerHelper->close();
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    SQLServerTest();
    
    return a.exec();
}

4. SQLServer封装类

sqlserverhelper.h

#ifndef SQLSERVERHELPER_H
#define SQLSERVERHELPER_H
#include <QtSql/QSqlDatabase>

class SQLServerHelper
{
public:
    SQLServerHelper();
    QSqlDatabase sqlserver_db;
    QSqlDatabase db;

    void open();
    void close();

    int count(QString sqlCommand);
    int query(QString sqlCommand);

};

#endif // SQLSERVERHELPER_H

sqlserverhelper.cpp

#include "sqlserverhelper.h"
#include <QDebug>
#include <QtSql/QSqlQuery>

SQLServerHelper::SQLServerHelper()
{
    QString connectionTemplate = "DRIVER={SQL SERVER};SERVER=%1;DATABASE=%2;";
    QString server = "127.0.0.1";
    QString dbName = "db";
    QString user = "sa";
    QString password = "1";

    QString connectionString = connectionTemplate.arg(server).arg(dbName);
    db = QSqlDatabase::addDatabase("QODBC");

    db.setDatabaseName(connectionString);
    db.setUserName(user);
    db.setPassword(password);
}

void SQLServerHelper::open()
{
    if (db.open())
    {
        qDebug("sqlserver connect successfully.");
    }
    else
    {
        qDebug("sqlserver connect failed.");
    }
}

void SQLServerHelper::close()
{
    db.commit();
    db.close();
}

int SQLServerHelper::count(QString sqlCommand)
{
    QSqlQuery query(db);
    query.prepare(sqlCommand);

    int recCount = 0;
    if(query.exec())
    {
        while(query.next())
            recCount ++;
    }

    return recCount;
}

int SQLServerHelper::query(QString sqlCommand)
{
    QSqlQuery query(db);
    query.prepare(sqlCommand);

    if(query.exec())
    {
        qDebug() << "execute successfully.";
        return 1;
    }
    else
    {
        qDebug() << "execute failed.";
        return 0;
    }
}




ok. 这样就可以实现简单的功能了, 以后添加再更新.....    2018/06/12

Qt数据库封装类 m_pDbProcPic = new CDBProcess("sqlserver"); m_pDbProc->openDB("mysvr", "mydb", "myusername", "mypwd"); m_pDbProcPic = new CDBProcess("mysql"); m_pDbProc->openDB("localhost", "mydb", "root", "password"); m_pDbProcPic = new CDBProcess("access"); m_pDbProc->openDB("", strMDB, "sa", "password"); m_pDbProcPic = new CDBProcess("sqlite"); m_pDbProcPic->openDB("", "mysqlitedb"); CDBProcess使用说明 构造函数: CDBProcess(const QString strType); 参数:为数据库类型,不区分大小写,支持的类型有 sqlite mysql access sqlserver 例: CDBProcess db("sqlite"); -------------------------------------------------- 打开数据库 bool openDB(const QString strSvrName, //服务器名 const QString strDBname, //数据库名 const QString strUserID="", //用户名 const QString strUserPwd=""); //密码 打开数据库成功,返回true,否则返回false 对于sqlite,只有strDBname有效,其它参数忽略,如db.openDB("", "mysqlite.db") 对于MS Access数据库,strSvrName为空,用户名默认为"sa",如db.openDB("", "myaccess.mdb"); 对MSAccess数据库,也可通过一个UDL文件,打开,如db.openDB("my.udl", ""); mysql和sqlserver,就是各个参数依次提供,如db.openDB("svr1", "mydb", "user1", "abcd"); ----------------------------------------------------- 关闭数据库,CDBProcess析构时,亦会自动关闭数据库 void closeDB(); //db.closeDB(); ------------------------------------------------------ 执行Sql语句 bool excuteSQL(const QString); ------------------------------------------------------- 打开记录集 bool openRecordsetBySql(const QString strSql, //Sql语句 int idx = -1); //记录集id,用于标识记录集,默认值为-1 例: db.openRecordsetBySql("SELECT * FROM TB1", 5); 打开一个记录集,标识号为5,后面操作这个记录集,也要提供这个标识号 -------------------------------------------------------- 关闭记录集 void closeRecordset(int idx = -1); 例: db.closeRecordset(5); 关闭之前打开的标识为5的记录集 ----------------------------------- 数据库是否处在打开状态 bool isOpen() const; ------------------------------------ 记录集游标是否在结尾,参数为记录集标识 bool recEOF(int idx = -1) const; 例:bool b = db.RecBOF(5); ------------------------------------ 记录集游标是否在第一条记录之前,参数为记录集标识 bool recBOF(int idx = -1) const; ---------------------------------------- 删除一个表 bool dropTable(const QString); --------------------------------------------- 读取标识为idx记录集的当前记录的各字段值,方法如示例: bool getFieldsValueFromRec(int idx, const char* szFldInfo, ...) const; int iSN; QString strName; double dHeight; QDateTime dt; QByteArray ba; db.getFieldsValueFromRec(5, //记录集id "sn%d", &iSN, //字段名加类型 sn为字段名%d表示整型,&iSN传入指针,保存返回字段值 "name%s", &strName, //字段名加类型 name为字段名%s表示字符串(QString) "height&f", &dHeight, //字段名加类型 height为字段名%f表示小数(double) "birthday%t", &dt, //字段名加类型 birthday为字段名%t表示时间(QDateTime) "photo%b", &ba, //字段名加类型 photo为字段名%b表示二进制流(QByteArray) CDBProcess::szEnd); //结束标志,"|" 执行后,各字段值就保存在iSN, strName等变量中了。 参数:第一个参数为记录集id 后面可变参数,字段%类型标识,用于保存返回值的指针, 类型标识:%d-int %s-QString %f-double %t-QDateTime %b-QByteArray --------------------------------------------------------------------------- 向一个数据表中填加一条记录 bool addFieldsValueToTbl(const QString strTbl, const char* szFldInfo, ...); 参数:第一个参数strTbl,为表名 后面是可变参数,为"字段%类型标识",值(或指针),注int,double类型直接传值,其它传指针 例: db.addFieldsValueToTbl("TB1", //表名 "sn%d", iSN, //字段名加类型 sn为字段名%d表示整型,iSN传入值 "name%s", &strName, //字段名加类型 name为字段名%s表示字符串(QString), 传入QString变量指针 "height&f", dHeight, //字段名加类型 height为字段名%f表示小数(double),dHeight传入值 "birthday%t", &dt, //字段名加类型 birthday为字段名%t表示时间(QDateTime),传入指针 "photo%b", &ba, //字段名加类型 photo为字段名%b表示二进制流(QByteArray),传入指针 CDBProcess::szEnd); //结束标志,"|" ----------------------------------------------------------- 修改表中符合WHERE子句条件的记录 bool updateTblFieldsValue(const QString strTbl, QString strWhere, const char * szFldInfo, ... ); strTbl表名 strWhere SQL WHERE子句,如"WHERE sn=20" const char * szFldInfo, ...可变参数,同addFieldsValueToTbl 例: db.updateTblFieldsValue("TB1", "WHERE sn=20", "height&f", dHeight, "photo%b", &ba, CDBProcess::szEnd); ---------------------------------------------------------------- 以下几个函数分别是获取记录数,和记录光标移动。参数为记录集标识 long getRecordCount(int idx = -1) const; bool moveFirst(int idx = -1) const; bool movePrevious(int idx = -1) const; bool moveNext(int idx = -1) const; bool moveLast(int idx = -1) const; bool moveTo(int n, int idx = -1) const; -------------------------------------------------------------------- 返回数据库名 QString getDbName() const; ------------------------ 以下几个函数未验证 bool execStoreProcOfArgList(int idx, const QString strStoreProc, const char* szFldsInfo, ...); bool exexProc(const QString strStoreProc, QString str1, QString& str2); bool transaction(); bool commit(); bool rollback(); 立即下载

相关推荐

Abaqus小白必看:用Micromechanics Plugin轻松搞定RVE周期性边界条件(附避坑指南)

本文为Abaqus初学者提供了使用官方Micromechanics Plugin插件高效实现复合材料代表性体积单元分析的完整指南。文章详细讲解了从插件安装、模型准备、周期性边界条件自动设置到结果验证的全流程,并重点分享了处理复杂模型和避免常见错误的实用技巧,帮助用户大幅提升RVE分析效率与准确性。

weixin_28363123的博客 796

QT 连接SQLServer数据库

输出open database success,则为连接 数据库成功。之后选择:使用用户输入登录ID和密码的SQL Server验证。选择下一步,点击测试数据源——如果显示 测试成功,则完成。连接SQL Server以获得其他配置选项的默认设置。然后,在ODBC数据源管理中,在服务器处填写ip地址。设置后,需要重新启动SQL Server服务。其次,如果连接不上,查看是否关闭了电脑的防火墙。最后,选择指定的数据库,测试查看是否连接成功。在SQL Server 配置管理器中。,ping后看能否成功。

JYliangliang的博客 4722

车辆TBOX科普 第7次 TBOX技术深度解析:硬件架构与核心组件详解

摘要: TBOX(车载远程信息处理单元)是智能网联汽车的核心组件,承担数据采集、通信连接与安全交互等关键功能。其硬件架构以主控单元为核心,采用ARM架构处理器(如NXP i.MX系列)实现高效能低功耗处理,搭配DDR4/LPDDR5内存保障性能,eMMC/UFS存储确保数据可靠性。设计中需平衡车规级可靠性(AEC-Q100)、EMC兼容性及成本控制,同时集成通信、定位与安全模块。未来趋势聚焦异构计算、先进制程及功能安全(ASIL-D)与信息安全融合,推动TBOX向边缘计算节点演进。该技术是汽车智能化转型的重

IT深耕十余载,大道之简 859

Qt Sql使用的简单封装

        基于Qt的sql库简单封装,主要是执行sql相关语句需要输入SQL的语法,这里做了一些封装,使得使用方便.        SqlService.h 头文件包括一些常用的sql的,打开,插入,删除,更新,获取,错误输出等一些接口.1.open接口:    功能:打开指定文件数据库,没有则创建    参数:name(数据库文件), type(打开方式)    返回值:返回是否打开成功....

Qt君 7896

Echats-wordcloud 文字云图的踩坑点【Unknown series wordCloud】

一直都是报 【ECharts Unknown series wordCloud】这玩意可能要刷脸,祝你好运吧~

Sky_Bug的博客 2418

ARM Memory Compiler实战指南:从参数配置到GDSII生成的全流程解析

本文详细解析了ARM Memory Compiler在SRAM设计中的全流程应用,从基础参数配置到GDSII文件生成。涵盖SRAM类型选择、核心参数配置策略、高级优化技巧及TSMC 28nm工艺下的实战案例,帮助IC设计工程师高效实现存储器模块的优化设计。

game4的博客 416

QtCreator5.3 连接SQLServer2008,QSqlDatabase,QSqlError,QSqlQuery

1 数据库

psujtfc的专栏 1917

SAGA GIS英文版进行地形分析,计算常用的地形因子等

SAGA GIS中文版是一款专业的自动化地球科学分析系统软件。SAGA GIS最新版界面简洁,操作简便,用户使用时输入要分割的影像,选择要计算特征的影像或者波段,设置越大,得到的斑块越大;反之,则越小,点击Okay,得到分割影像图。SAGA GIS中文版主要通过选择适合你影像的格式,加载影像。 SAGA GIS全称是System for Automated Geoscientific Analyses,是一种用于编辑空间数据的地理信息系统(GIS)计算机程序,它是免费的开源软件,SAGA GIS旨在为科学家

qq_35794085的博客 5640

QT连接SqlServer数据库

使用QT creator连接SqlServer数据库 一、首先在.pro文件中添加代码 QT+=sql 二、主要代码 void createConnection() { QSqlDatabase db = QSqlDatabase::addDatabase(“QODBC”);//说明连接的是SqlServer数据库 db.setDatabaseName(QString(“DRIVER={SQL SERVER}; SERVER=%1; DATABASE=%2; UID=%3; PWD=%4;”) .ar

tigerqaq的博客 1544

【PyTorch项目实战】之ResNet系列:resnet18、resnet34、resnet50、resnet101、resnet152

ResNet (Residual Network) :是一种深度卷积神经网络(CNN)架构,其核心思想是引入残差学习(Residual Learning)机制,通过跳跃连接(skip connections)来解决深层网络训练中的退化问题。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 6372

Qt操作sqlserver数据库

由于数据库实验作业规定必须要做可视化界面,所以摸鱼怪也只好继续肝 Qt 了 (;´༎ຶД༎ຶ`) 准备工作 这里的准备工作就是就是建数据库、建表、然后就是在控制面板配置 ODBC 数据源 准备内容与以前写的 VS2017操做sql server数据库 准备内容一样(除了代码操作部分) 本文也依照VS2017操做sql server数据库里的例子,列出操作的主要代码 代码实现部分 首先需要在新建的 Qt 工程里的 .pro 文件里引入:QT =+ sql 连接数据库 #include "mainwin

xwmrcj的博客 5303

智能车浅谈——手把手让车跑起来(电磁篇)

手把手让你的电磁车上路。

qq_41954556的博客 7万+

Qt封装号的数据库操作类

连接QMYSQL,包含断线重连。源文件(xxx.cpp)头文件(xxx.h)

哈呼呼屠露 541

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Qt封装Sql类,便捷进行sql的增删改查操作,附源码

前言 前阵子有个项目要运用数据库,就写了个类进行便捷操作,由于运用Sqlserver,代码就以连接SqlServer为例。 废话不多上代码。 正文 #ifndef SQLSEVER_H #define SQLSEVER_H #include <QObject> #include <QtSql/QSqlDatabase> #include <QtSql/QSqlQuery> #include <QDebug> class SqlSever { public

qq_40795137的博客 2037

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

QT连接SQLserver详细教程

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

qq_46712603的博客 5145

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

一个针对SQLServer操作的封装类

1using System;  2using System.Data.SqlClient;  3using System.Data;  4using System.IO;  5using System.Windows.Forms;  6using System.Collections;  7namespace SQL  8...{  9    /**//// 10    /// 作    者:刘决

johncools的博客 1071

Qt SqliteHelper , QSqlDatabase和QSqlQuery实现

看到一篇关于Qt使用Sqlite的教程贴, 稍微改了下封装起来原帖地址:    https://www.cnblogs.com/xia-weiwen/archive/2017/05/04/6806709.html遇到一个头疼的bug, 调试了一个上午//bug 需要在方法中重新定义, 不然会出现 "Driver not loaded" 的错误QSqlQuery sql_query;这个对象要在类成...

Empty_Android的博客 1257

Qt:QSqlDatabase的进一步封装(多线程支持+更加简单的操作)

开发背景: 1.直接用QSqlDatabase我觉得太麻烦了; 2.对于某些数据库,多个线程同时使用一个QSqlDatabase的时候会崩溃; 3.这段时间没什么干货放出来觉得浑身不舒服,就去整了一个。 于是,我就封装了一下 只要简单的实例化,然后通过query()就可以拿到QSqlQuery的实例化对象。 还自带计时,一段时间不用可自动关闭,既保证效率也不占用无用资源。

Jason’s home 1万+

在vs中使用Qt连接SQLServer数据库

更多0 c++数据库 //1.添加SQL库:“Qt project setting”–>“Qt Modules”,在SQL library复选框前打勾. //2.添加头文件 #include #include <QtSql/QSqlDatabase> #include <QtSql/QSqlTableModel> #include<QtSql/QSqlError...

qq_35718950的博客 2276

使用QT连接SqlServer数据库

最近在项目中需要使用QT来对Sqlserver进行操作,特此记录,以便回忆。 1.确保QT的安装包里已经加载sqlserver的驱动。 以QT5.3为例,在目录D:\Qt\5.3\mingw482_32\plugins\sqldrivers下,有相应的动态库。 2.在工程文件(.pro)里加一行:QT+=sql。 3.创建.cpp文件,敲代码。 //连接sqlserver

西瓜汽水的博客 1万+

记录Qt中数据库SQL server的使用

用于操作数据库的模型类有QSqlQueryModel和QSqlTableModel,QSqlQueryModel设置的select语句查询数据库的内容,数据是只读的,不能进行编辑,而QSqlTableModel直接设置一个数据表的名称,可以获取数据表的全部记录,其结果是可编辑的,界面上设计为QTableView组件的数据模型就可以显示和编辑数据。QSqlQuery是可以执行任何Sql语句,特别是没有返回记录的语句,如:update,insert,delete等,通过Sql语句可以直接修改。

ZCADG的博客 247

QT访问SQLITE和SQLServer数据库

话不多说,直接上代码,流程比较简单。仅供小白观看,大佬图个乐呵就行。

m0_68783592的博客 828

qt 连接 sqlserver 两种写法

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); db.setDatabaseName(QString("DRIVER={SQL SERVER};" "SERVER=%1;" //服务器名称 "DATABASE=%2;"//数据库名 "UID=%3;" //登录名 "PWD=%4;"

我的专栏 1360

数据库封装 sql server mysql_异步的SQL数据库封装详解

引言我一直在寻找一种简单有效的库,它能在简化数据库相关的编程的同时提供一种异步的方法来预防死锁。我找到的大部分库要么太繁琐,要么灵活性不足,所以我决定自己写个。使用这个库,你可以轻松地连接到任何 SQL-Server 数据库,执行任何存储过程或 T-SQL 查询,并异步地接收查询结果。这个库采用 C# 开发,没有其他外部依赖。背景你可能需要一些事件驱动编程的背景知识,但这不是必需的。使用这个库由两...

weixin_39707201的博客 327

【2021-1-5】QT+SQLsever数据库的数据管理系统

QT+SQLsever数据库的数据管理系统目录登录界面统计图表制作QT界面之间传递参数左键点击tablevie后跳出菜单点击表格在label上显示图片、下载、上传到数据库保存widget为PDF保存tableview为Excellineedit美化,combo box 美化作者有话说 目录 该系统的功能有:图表显示,图像界面对数据的增删改查,界面跳转缓冲进度条,开机界面,角色管理等。 登录界面 数据库连接: /********************************数据库连接**********

每晚秃头的程序员的博客 3872
上一篇: Qt 创建文件 用QFile和QDir类
下一篇: cmd tree命令 枚举文件目录树
Empty_Android
博客等级 码龄10年 98粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值