【原創】Qt 使用ODBC driver 連接SQL Server


  最近在做數據庫的課程設計。第一個需要解決的問題是使用什么工具來實現這個系統。經過一番資料查找,決定使用SQL Server Express 2012作為服務器,使用Qt作為編寫客戶端程序語言。問題是client如何連接SQL Server? 下面是我的解決方法。

  

  1.開啟windows上的SQL Server 的ODBC驅動

    ODBC 是一個調用級接口,它使得應用程序得以訪問任何具有 ODBC 驅動程序的數據庫中的數據。使用 ODBC 可以創建具有訪問任何數據庫(最終用戶具有該數據庫的 ODBC 驅動程序)的權限的數據庫應用程序。ODBC 提供了使您的應用程序獨立於源數據庫管理系統 (DBMS) 的 API。一個應用程序訪問DBMS中數據庫的過程:應用程序使用ODBC API 向DBMS的ODBC Driver發起連接,應用程序的所有查詢事務都將通過ODBC Driver來操作DBMS的數據庫。因此要操作DBMS必須先啟動ODBC Diver。下面是啟動過程。

    (1)控制面板->管理工具->數據源

      

      

    (2)用戶DSN->選擇“添加”,添加數據源(如上圖所示)。選擇數據源驅動程序為SQL Server(如下圖所示).

      

    (3)創建到SQL Server的數據源。這里注意選擇自己SQL Server的實例作為服務器,例如我這里是DCKRSHW5HQU8SM1\SQLEXPRESS。

      

    (4)選擇登錄驗證方式。由於我連接SQL Server的方式Windows Authentication,因此選擇第一項。如果你的連接方式是SQL Server Authentication,請選擇第二項並填寫ID和password。

      

    (5)更改默認數據庫,下一步,完成。

      

    (6)測試數據源

      

  

  2. 編程連接SQL Server

    我使用的Qt5.1.1(VS2012),在路徑:Qt安裝根目錄/msvc2012/plugins/sqldrivers下可以找到支持ODBC的qsqlodbcd.dll。在路徑:Qt安裝根目錄/msvc2012/include/QtSql下可以找到對應頭文件。

    關於ODBC API 的使用文檔在路徑:Qt安裝根目錄/msvc2012/doc/qtsql 下。打開index.html即可使用。

    為了能夠使用ODBC API 源程序需要添加 頭文件

        #include<QtSql/QtSql>

     在.pro文件中添加一行來添加sql動態庫

        QT       +=sql

    如果你當前的編譯方式是Debug出現如下錯誤,將編譯方式改為Release即可編譯。

    main.obj:-1: error: LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QSqlDatabase::~QSqlDatabase(void)" (__imp_??1QSqlDatabase@@QAE@XZ) referenced in function _main

    debug報錯而release不報錯這個問題我糾結了很久。其實原因是,當使用QT+=sql添加sql模塊后,直接構建項目,項目的makefile.debug里面並沒有添加sql的debug庫。當執行qmake后,sql模塊的debug庫會被添加到makefile.debug里面。如下面所示:

    LIBS          = /LIBPATH:D:\ProgramFiles\Programing\Qt\Qt5.1.1\5.1.1\msvc2012\lib D:\ProgramFiles\Programing\Qt\Qt5.1.1\5.1.1\msvc2012\lib\Qt5Sqld.lib D:\ProgramFiles\Programing\Qt\Qt5.1.1\5.1.1\msvc2012\lib\Qt5Cored.lib 

 

 

    源程序:

 1 #include <QCoreApplication>
 2 //#include <QtSql/QSql>
 3 #include <QtSql/QtSql>
 4 #include<stdio.h>
 5 #include<stdlib.h>
 6 
 7 int main(int argc, char *argv[])
 8 {
 9     //QCoreApplication a(argc, argv);
10 
11     QString serverName = "DCKRSHW5HQU8SM1\\SQLEXPRESS";
12     QString dbName = "test";
13     QSqlDatabase myDB = QSqlDatabase::addDatabase("QODBC");//連接到ODBC驅動
14     QString dsn = QString("Driver={SQL Server};Server=%1;Database=%2;Trusted_Connection=yes").arg(serverName).arg(dbName);
15     myDB.setDatabaseName(dsn);
16     if(myDB.open())
17     {
18         printf("connect to server successfully\n");
19         myDB.close();
20     }
21     else
22     {
23         printf("connect to server failed\n");
24         printf("%s\n",myDB.lastError().text().toLatin1().data());
25     }
26 
27     return 0;
28 
29     //return a.exec();
30 }

 

  如何使用API進行連接請參考文檔,我再這里想重點指出的是如何寫"建立連接字符串"。上面代碼中我的ODBC連接字符串是

    "Driver={SQLServer};Server=DCKRSHW5HQU8SM1\\SQLEXPRESS;Database=test;Trusted_Connection=yes"

  該連接字符串之所以沒有Uid和Pwd字段是因為我的SQL Server的登錄方式為Windows Authentication。如果登錄方式為SQL Server Authentication,請添加這兩個字段。

  關於Connection Strings,下面這個網站有所有的Connection Strings收集。

    http://www.carlprothman.net/Default.aspx?tabid=81

  程序運行結果:

   

  

 

 

      

    

    

    

    

  


免責聲明!

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



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