Qt5.6.0连接SQL Server 2008

news/2024/7/7 14:39:03

本文将介绍如何在Qt中连SQL Server数据库,假设已经具有如下软件环境:

  • win7 64
  • VS 2013
  • Qt 5.6.0(32 msvc)
  • Qt add in 1.2.5
  • SQL Server 2008(32、64应该都可以)

数据库有关问题

  • 如何用sa(或者自己建立一个登录名)登录?

    新手教程使用设置sa用户登录sql server2008

    更改后重启服务器才能生效,在Sql Server Configuration Manager中重启SQL Server(MSSQLSERVER)服务。

    ip用localhost比较好,因为如果在不同的电脑上执行的话,可能ip不同,但是localhost却可以准确定位到ip。实现qt连接SQLserver实例

  • 如何设置DSN名?

    总的来说有两种方法:1.操作系统中配置DSN;2.在Qt程序中配置。

    Qt通过ODBC连接SQL Server2008实践总结这篇文章有说第1种方法。在操作系统中配置DSN的时候,服务器是LN7XVE8H9DDB5A3(我电脑的名字,可以在sql server中local右键属性查看),hostname用的“local”。第2种,可以直接看后面我给的示例代码。

创建数据库、表相差问题

  • sql server 2008不允许保存更改

    sql server 2008不允许保存更改,您所做的更改要求删除并重新创建以下表
    工具菜单—-选项—-Designers(设计器)—-阻止保存要求重新创建表的更改 取消勾选即可。

  • qsqlquery有两种执行sql插入语句的方法(C++ Qt设计模式(第2版)379页)

    • QSqlQuery.exec(QString)
    • QSqlQuery.prepare(QString)
  • 怎么刷新SQL Server 2008中查询后的表格

    点击红色“执行SQL”按钮

远程连接数据库

  • 本地接连和远程连接的区别

    SQL Server 2008本身就是网络数据库,不管是访问本地还是远程访问,区别只是服务器不同,如果是远程连接需要检查远程连接是否打开:
    SQL Server 2008 R2如何开启数据库的远程连接

  • 没有SQL Server的驱动

    如果qt中没有SQL Server的驱动请参考:Qt5.6.0(32位)编译SQLServer驱动(ODBC)(vs2013)。

  • 从外网访问局域网里的数据库

    这个比较麻烦,要知道局域网是没有公网的IP的,访问者和数据库同在一个局域网可以轻松访问。如果想从外网访问局域网里的数据库,需要端口映射,花生壳有这个功能,我试了一下但是没有成功。

示例code

如果要让代码运行成功,在运行代码前需要在SQL Server 2008中新建一个数据库,这里取名为testdb,在该数据库中新建一张表,取名为Table_1,在该表中有三个字段:apple,beer,tree,均为float型,不为null。

附上一段示例代码(完整工程在这里):

//测试SQLServer

#include <QtCore/QCoreApplication>
#include <QtSql/qsql.h>
#include <QtSql/qsqldatabase.h>
#include <QtSql/qsqlquery.h>
#include <QtSql/qsqlerror.h>
#include <QtSql/qsqltablemodel.h>
#include <qstring.h>
#include <qfile.h>
#include <qdebug.h>
#include <qvariant.h>
#include <qdatetime.h>
#include <qsqlrecord.h>


bool createConnection(QString driver, QString server, QString database, QString userName, QString passWord)
{
    QSqlDatabase db = QSqlDatabase::addDatabase(driver);

    //方式1.在程序中配置DSN
    QString dsn = QString("Driver={SQL SERVER};SERVER=%1;DATABASE=%2;UID=%3;PWD=%4").arg(server).arg(database).arg(userName).arg(passWord);//

    //方式2.使用"控制面板"-"管理工具"-"数据源(ODBC)"进行配置
    //QString dsn = QString::fromLocal8Bit("QTDSN");

    db.setDatabaseName(dsn);

    if (!db.open())
    {
        qDebug() << db.lastError();
        return false;
    }
    return true;
}

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

    QString driver   = "QODBC";             //驱动名
    QString server   = "LN7XVE8H9DDB5A3";   //SERVER=LN7XVE8H9DDB5A3(改成自己电脑名),或者SERVER=192.168.168.61(改成自己的IP)
    QString database = "testdb";            //数据库名
    QString userName = "sa";                //登录用户
    QString passWord = "123456";            //登录密码

    bool isConncet = createConnection(driver, server, database, userName, passWord); //连接数据库
    if (!isConncet)
    {
        return 1; //连接失败则返回1
    }

    //插入
    QSqlQuery insertQuery;
    insertQuery.prepare("INSERT INTO Table_1 (apple, beer, tree)"
        "VALUES (?, ?, ?)"); //ODBC风格

    insertQuery.addBindValue(12.3); // apple
    insertQuery.addBindValue(32.1); // beer
    insertQuery.addBindValue(34.45);// tree
    insertQuery.exec();

    //查找
    QSqlQuery selectQuery;
    selectQuery.exec("SELECT apple, beer FROM Table_1"); //sql查询语句
    while (selectQuery.next())
    {
        double apple = selectQuery.value(0).toDouble();
        double beer = selectQuery.value(1).toDouble();
        qDebug() << apple << " " << beer;
    }
    return a.exec();
}

可以看到程序向数据库中插入了一行数据,如果正常运行将会看到屏幕上输出12.3 32.1.

转载于:https://www.cnblogs.com/shanchuan/p/8150291.html


http://www.niftyadmin.cn/n/3495228.html

相关文章

YOLO3 + Python3.6 深度学习篇(下)- Transfer Learning 迁移学习

上一篇文章链接&#xff1a; YOLO3 Python3.6 实时物体检测篇&#xff08;中&#xff09;- Transfer Learning 迁移学习如同第一个单元所述&#xff0c;这个项目的第三大块就是训练模型的环节了&#xff0c;是整个项目的最终临门一脚。在 “图片数据集” 和 “数据标签文档” …

IE8下不支持console.log()

http://www.xuebuyuan.com/2139615.html http://zkeyword.com/post/console_log/转载于:https://www.cnblogs.com/sj521/p/5630122.html

/proc/sysrq-trigger使用说明

重启服务器 # echo 1 > /proc/sys/kernel/sysrq # echo b > /proc/sysrq-trigger 1. /proc/sys/kernel/sysrq 向sysrq文件中写入1是为了开启SysRq功能。根据linux/Documentations/sysrq.txt中所说&#xff1a;SysRq代表的是Magic System Request Key。开启了这个功能以…

MySQL常见的数据类型(八)

不多说&#xff0c;直接上干货! MySQL常见的数据类型 一、数据类型是什么&#xff1f; 数据类型是指列、存储过程参数、表达式和局部变量的数据特征&#xff0c;它决定了数据的存储格式&#xff0c;代表了不同的信息类型。 有一些数据是要存储为数字的&#xff0c;数字当中有些…

深度学习 + 论文详解: Fast R-CNN 原理与优势

论文链接 fast R-CNN: https://arxiv.org/pdf/1504.08083.pdf p.s. 鉴于斯坦福大学公开课里面模糊的 R-CNN 描述&#xff0c;这边决定精读对应的论文并把心得和摘要记录于此。前言 在机器视觉领域的物体识别分支中&#xff0c;有两个主要的两大难题需要解决&#xff1a; 目标图…

String.format()的总结

JAVA字符串格式化-String.format()的使用 常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言的同学应该记得C语言的sprintf()方法&#xff0c;两者有类似之处。format()方法有两种重载形式。 format(String format, Object... …

Django_ORM_字段属性

Django_ORM_字段属性 常用字段 AutoField int自增列,必填参 primary_keyTrue 默认会自动创建一个列名为id的列 IntegerField 一个整数类型,范围在 -2147483648 to 2147483647 CharField 字符类型,必提供max_length参数, max_length表示字符长度 DateField 日期字段,日期格式…

深度学习 + 论文详解: R-CNN 原理与优势

论文链接 R-CNN: http://islab.ulsan.ac.kr/files/announcement/513/rcnn_pami.pdf