Qt5.6.0链接SQL Server 2008

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

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

数据库有关问题

  • 如何用sa(或者本身创建一个登陆名)登陆?c++

    新手教程使用设置sa用户登陆sql server2008sql

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

    ip用localhost比较好,由于若是在不一样的电脑上执行的话,可能ip不一样,可是localhost却能够准肯定位到ip。实现qt链接SQLserver实例设计模式

  • 如何设置DSN名?服务器

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

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

建立数据库、表相差问题

远程链接数据库

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

    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.

相关文章
相关标签/搜索