Qt連接SQL server數據庫


 

Qt連接SQL server數據庫


 

由於課程設計需要,需要用qt設計一個界面來操作數據庫,在建立數據庫連接時,期間遇到各種問題。

Qt 連接SQL server數據大致可以概括為下圖的三層模型,箭頭代表他們之間的依賴關系

第一步:建立目標數據庫

在連接數據庫之前,需要先在SQL Server中建立一個目標數據庫,建立數據庫和添加表的步驟這里不詳述,

如建立一個名為Student 的數據庫,其中有Student表、Course表和SC三個表。這里使用的是數據庫版本為 SQL Server 2008 R2。


第二步:配置數據庫數據源

在配置數據源之前,要確保1433號端口已打開,1433端口,是SQL Server默認的端口,SQL Server服務使用兩個端口:TCP-1433、UDP-1434。其中1433用於供SQL Server對外提供服務,1434用於向請求者返回SQL Server使用了哪個TCP/IP端口。

設置SQL Server 網絡配置中的TCP/IP協議為已啟用狀態,並且檢查其默認端口是否為1433端口。


在開始菜單搜索SQL Server 配置管理器,選擇SQL Server網絡配置。



右鍵TCP/IP,選擇屬性查看其默認端口,設置其為1433



服務和端口設置好后接下來配置ODBC數據源。開放數據庫連接(Open Database Connectivity,ODBC)是微軟公司開放服務結構(WOSA,Windows Open Services Architecture)中有關數據庫的一個組成部分,它建立了一組規范,並提供了一組對數據庫訪問的標准API(應用程序編程接口)

Qt數據庫驅動並不能直接連接到SQL Server中的數據庫,而是要通過配置ODBC數據源來進行連接。

開始->搜索ODBC->點擊dBASE Files 選擇添加



選擇SQL Server



命名數據源名稱並選擇服務器,這里的服務器名即SQL Server 登錄框中的服務器名,把它復制過來





選擇登錄方式為SQL Sever驗證方式,並設置登錄名和密碼,這里選擇sa(超級用戶)

注意:登錄名必須是數據庫中已存在的登錄用戶


選擇需要連接的數據庫作為默認數據庫


選擇下一步 ,測試數據源,成功后單擊確定。



第三步 Qt連接數據源

新建一個Qt GUI工程,在其pro文件中加入QT += sql,設計界面並設計界面

Qt 提供了多種數據的驅動,可以在幫助文檔搜索sql中找到



下面是Qt幫助文檔提供的連接代碼:



建立連接的代碼:

 

  1. #include <QApplication>  
  2. #include <QDialog>  
  3. #include"mainwindow.h"  
  4. #include<connection.h>  
  5. #include <QSqlDatabase><span style="white-space:pre">                 </span>//頭文件  
  6. #include <QDebug>  
  7. #include <QMessageBox>  
  8. #include<QSqlError>  
  9.   
  10. bool OpenDatabase()  
  11. {  
  12.     QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");   //數據庫驅動類型為SQL Server  
  13.     qDebug()<<"ODBC driver?"<<db.isValid();  
  14.     QString dsn = QString::fromLocal8Bit("QTDSN");      //數據源名稱  
  15.     db.setHostName("localhost");                        //選擇本地主機,127.0.1.1  
  16.     db.setDatabaseName(dsn);                            //設置數據源名稱  
  17.     db.setUserName("sa");                               //登錄用戶  
  18.     db.setPassword("xwz123");                           //密碼  
  19.     if(!db.open())                                      //打開數據庫  
  20.     {  
  21.         qDebug()<<db.lastError().text();  
  22.         QMessageBox::critical(0, QObject::tr("Database error"), db.lastError().text());  
  23.         return false;                                   //打開失敗  
  24.     }  
  25.     else  
  26.         qDebug()<<"database open success!";  
  27.     return true;  
  28. }  
  29.   
  30. int main(int argc, char *argv[])  
  31. {  
  32.     QApplication a(argc, argv);  
  33.     MainWindow w;  
  34.     if(!OpenDatabase())  
  35.         return 1;  
  36.   
  37.     w.show();  
  38.     return a.exec();  
  39. }  
#include <QApplication>
#include <QDialog>
#include"mainwindow.h"
#include<connection.h>
#include <QSqlDatabase>//頭文件
#include <QDebug>
#include <QMessageBox>
#include<QSqlError>

bool OpenDatabase()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");   //數據庫驅動類型為SQL Server
    qDebug()<<"ODBC driver?"<<db.isValid();
    QString dsn = QString::fromLocal8Bit("QTDSN");      //數據源名稱
    db.setHostName("localhost");                        //選擇本地主機,127.0.1.1
    db.setDatabaseName(dsn);                            //設置數據源名稱
    db.setUserName("sa");                               //登錄用戶
    db.setPassword("xwz123");                           //密碼
    if(!db.open())                                      //打開數據庫
    {
        qDebug()<<db.lastError().text();
        QMessageBox::critical(0, QObject::tr("Database error"), db.lastError().text());
        return false;                                   //打開失敗
    }
    else
        qDebug()<<"database open success!";
    return true;
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    if(!OpenDatabase())
        return 1;

    w.show();
    return a.exec();
}


 

到此為止,Qt就連接上數據庫了,其他數據庫連接過程類似在連接過程中需注意的幾個問題:

 

  • 確保1433號端口已經打開
  • 確認SQL Server 網絡配置的TCP/IP協議已啟用。
  • 正確配置ODBC數據源
  • 正確建立連接,登錄名和登錄密碼為數據庫中已存在的登錄用戶

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM