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.

相關文章
相關標籤/搜索