(记录)使用QT的Qodbc连接sqlserver2008

1:创建工程,创建时Base Class选择Qwidge,创建号后,点开后缀为.pro的文件,将QT += core gui修改为QT += core gui sql
2:在sql server Management中选择好数据库,右键,新建登陆名gcw请添加图片描述
下方选择好默认数据库请添加图片描述

记得要关掉强制密码策略,然后打开这个界面左侧的用户映射现!请添加图片描述

先在上面勾选你想要连接的那个数据库,随后还需要勾选下方的这两个
在这里插入图片描述
打开状态那一栏,保证是这样的
在这里插入图片描述
创建好后,打开ODBC数据源,用windows搜索功能就能找到
在这里插入图片描述在这里插入图片描述
点击添加,选择这个在这里插入图片描述

在这里插入图片描述密码就是之前创用户的那个
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试数据源,成功
在这里插入图片描述
回到QT在widget.cpp那个文件里,把这些代码贴进去

#include "widget.h"
#include "ui_widget.h"
#include <QSqlDatabase>	//连接数据库
#include <QSqlError>	//数据库连接错误是使用到
#include <QSqlQuery>	//数据库操作
#include <QMessageBox>	//警告窗口的头文件,不适用警告窗口就不要添加了
#include<QDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    qDebug() << "Available drivers:" << QSqlDatabase::drivers();//输出当前环境支持的数据库,如有不支持的自行解决
        //添加数据库
        QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");//QODBC指要连接的是SQL server数据库
        //连接
        db.setHostName("local");          //填写主机名或填写ip地址也可以,在SQLServerManager10.msc里面查看不知道主机名的看下面的图片
        db.setDatabaseName("gcw");//这个是在系统的ODBC数据源里面设置的数据源
       
        db.setUserName("gcw");  //数据库用户名(我这里的是DESKTOP-27SFC8I\nhjclxc),在打开SQL Server Management Studio的时候的那个就是。
        db.setPassword("gcw010927");               //数据库密码,一般就是你电脑的密码,


        //判断数据库是否连接成功

        if(true == db.open()){
            //操作数据库,定义操作句柄
            QSqlQuery query;

            //创建表的同时,进入操作
            if (query.exec("CREATE TABLE student( id INT , name VARCHAR(10), phone INT);") ){
                qDebug() << "创建表操作成功!!!" << endl;
                QMessageBox::warning(this,"数据表创建成功","数据表创建成功");
                /*
                //当行插入数据
                query.exec("insert into student(id, name, phone) values(1000, '哈哈哈',151615616);");
                query.exec("insert into student(id, name, phone) values(1320, '哈哈哈',151615616);");
                query.exec("insert into student(id, name, phone) values(1032, '哈哈哈',151615616);");
                query.exec("delete from student where id = 1032;");

                //批量插入,还有其他方法也可以,这里就不在演示了
                for(int i = 0; i < 10; i++){
                    qDebug() << QString::number(1000+i, 10);
                    qDebug() << "insert into student(id, name, phone) values(" + QString::number(1000+i,10) + ", '哈哈哈',151615616);" ;
                    query.exec(QString("insert into student(id, name, phone) values(" + QString::number(1000+i,10) + ", '哈哈哈',151615616);"));
                }
                */
                //查询
                query.exec("select * from student;");
                //query.exec("select * from student where id = 1032;");//条件查询

                //判断下这个数据表是否有数据,有就继续输出
                while (query.next()) {
                                //query.value(0)表示取第0列的值,在将其转化为对应的类型,创建表的时候是什么类型就转换为什么类型,使用数据表的字段名也可以输出,如"name"、"phone"
                    qDebug() << "id: " << query.value(0).toInt()
                                << ", name: "<<query.value("name").toString()
                                   << ", phone: " << query.value("phone").toInt();
                }

                //如果数据库存在就删除
                //if (query.exec("drop table student;"))
                //  QMessageBox::warning(this,"数据表删除成功","数据表删除成功");
            }
            else
                qDebug() << "语法有误,操作失败!!!" << endl;

            //可以打开的话必须关闭
            db.close();

        }else{
            QMessageBox::warning(this,"数据库打开失败!!!",db.lastError().text());
            qDebug() << "数据库打开失败!!!"<< db.lastError().text() <<endl;
        }

}

Widget::~Widget()
{
    delete ui;
}


感谢这两份博客:
https://blog.csdn.net/qq_43680827/article/details/123344162
https://blog.csdn.net/xianchao0127/article/details/111084495

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值