强强的个人技术博客 医技科室软件(PACS, RIS)码农

[Qt]Qt连接SQL Server数据

Qt连接SQL Server数据

一、配置ODBC数据源

1)控制面板->管理工具->ODBC数据源

2)用户DSN->添加->SQL Server 

3)这里的名称(后面QT连接的名字)

4)下一步操作

5)修改默认的数据库连接



二、编写QT项目

1)功能中增加 sql 模块

QT       += core gui

2)添加引用

#include "widget.h"
#include "ui_widget.h"
#include "QSqlError"
#include "QSqlDatabase"
#include "QDebug"
#include "QMessageBox"
#include "QSqlQuery"

3) 连接数据的方法

/**
 * @brief Widget::openConnect
 */
void Widget::openConnect()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    qDebug()<<"ODBC dirvier"<< db.isValid();

    QString dsn = QString::fromLocal8Bit("QTDemo"); //上面ODBC 操作的流程
    db.setHostName("localhost");
    db.setDatabaseName(dsn);
    db.setUserName("sa");       //数据库连接用户名
    db.setPassword("XXXXX");  //数据库连接密码
    bool ok = db.open();

    if(db.open()){
        qDebug()<<"open database successs";

        db.close();
    }else{
        qDebug() << db.lastError().text();
        QMessageBox::critical(this,"提醒","连接失败");
    }

}


4)插入一条新记录

  QString sql=QString( "insert into t_user(username,sex,age) values('%1','%2',%3)")
            .arg(ui->tbName->text())
            .arg(ui->tbSex->text())
            .arg(ui->tbAge->text().toInt());

    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    qDebug()<<"ODBC dirvier"<< db.isValid();

    QString dsn = QString::fromLocal8Bit("QTDemo");
    db.setHostName("localhost");
    db.setDatabaseName(dsn);
        db.setUserName("sa");       //数据库连接用户名
        db.setPassword("XXXXX");  //数据库连接密码
    bool ok = db.open();

    if(db.open()){
        qDebug()<<"open database successs";
        qDebug()<< sql;
        QSqlQuery cmd = QSqlQuery(db);
        cmd.prepare(sql);
        bool ins_res= cmd.exec();
        if(ins_res){
            qDebug() << "插入成功";
        }else{
            qDebug() << "插入失败";
        }
        db.close();
    }else{
        qDebug() << db.lastError().text();
        QMessageBox::critical(this,"提醒","连接失败");
    }

5)修改一条数据

    QString sql=QString( "update t_user set username='%1',sex='%2',age=%3 where id=%4")
                .arg(ui->tbName->text())
                .arg(ui->tbSex->text())
                .arg(ui->tbAge->text().toInt())
                .arg(ui->tbID->text().toInt());
    
        QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
        qDebug()<<"ODBC dirvier"<< db.isValid();
    
        QString dsn = QString::fromLocal8Bit("QTDemo");
        db.setHostName("localhost");
        db.setDatabaseName(dsn);
        db.setUserName("sa");
        db.setPassword("123.com");
        bool ok = db.open();
    
        if(db.open()){
            qDebug()<<"open database successs";
            qDebug()<< sql;
            QSqlQuery cmd = QSqlQuery(db);
            cmd.prepare(sql);
            bool ins_res= cmd.exec();
            if(ins_res){
                qDebug() << "修改成功";
            }else{
                qDebug() << "修改失败";
            }
            db.close();
        }else{
            qDebug() << db.lastError().text();
            QMessageBox::critical(this,"提醒","连接失败");
        }

参数方式:

QString sql=QString( "update t_user set username=?,sex=?,age=? where id=?")
            .arg(ui->tbName->text())
            .arg(ui->tbSex->text())
            .arg(ui->tbAge->text().toInt()) ;

    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    qDebug()<<"ODBC dirvier"<< db.isValid();

    QString dsn = QString::fromLocal8Bit("QTDemo");
    db.setHostName("localhost");
    db.setDatabaseName(dsn);
    db.setUserName("sa");
    db.setPassword("123.com");
    bool ok = db.open();

    if(db.open()){
        qDebug()<<"open database successs";
        qDebug()<< sql;
        QSqlQuery cmd = QSqlQuery(db);
        cmd.prepare(sql);
        cmd.addBindValue(ui->tbName->text()); //解决输入带sql入参
        cmd.addBindValue(ui->tbSex->text());
        cmd.addBindValue(ui->tbAge->text());
        cmd.addBindValue(ui->tbID->text());
        bool ins_res= cmd.exec();
        if(ins_res){
            qDebug() << "修改成功";
        }else{
            qDebug() << "修改失败";
        }
        db.close();
    }else{
        qDebug() << db.lastError().text();
        QMessageBox::critical(this,"提醒","连接失败");
    }


2023年9月30日 | 发布:强强 | 分类:QT | 评论:0

发表留言: