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