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,"提醒","连接失败"); }