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幫助文檔提供的連接代碼:
建立連接的代碼:
- #include <QApplication>
- #include <QDialog>
- #include"mainwindow.h"
- #include<connection.h>
- #include <QSqlDatabase><span style="white-space:pre"> </span>//頭文件
- #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();
- }
#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數據源
- 正確建立連接,登錄名和登錄密碼為數據庫中已存在的登錄用戶