【原创】Qt 使用ODBC driver 链接SQL Server

  最近在作数据库的课程设计。第一个须要解决的问题是使用什么工具来实现这个系统。通过一番资料查找,决定使用SQL Server Express 2012做为服务器,使用Qt做为编写客户端程序语言。问题是client如何链接SQL Server? 下面是个人解决方法。html

  

  1.开启windows上的SQL Server 的ODBC驱动sql

    ODBC 是一个调用级接口,它使得应用程序得以访问任何具备 ODBC 驱动程序的数据库中的数据。使用 ODBC 能够建立具备访问任何数据库(最终用户具备该数据库的 ODBC 驱动程序)的权限的数据库应用程序。ODBC 提供了使您的应用程序独立于源数据库管理系统 (DBMS) 的 API。一个应用程序访问DBMS中数据库的过程:应用程序使用ODBC API 向DBMS的ODBC Driver发起链接,应用程序的全部查询事务都将经过ODBC Driver来操做DBMS的数据库。所以要操做DBMS必须先启动ODBC Diver。下面是启动过程。数据库

    (1)控制面板->管理工具->数据源编程

      

      

    (2)用户DSN->选择“添加”,添加数据源(如上图所示)。选择数据源驱动程序为SQL Server(以下图所示).windows

      

    (3)建立到SQL Server的数据源。这里注意选择本身SQL Server的实例做为服务器,例如我这里是DCKRSHW5HQU8SM1\SQLEXPRESS。服务器

      

    (4)选择登陆验证方式。因为我链接SQL Server的方式Windows Authentication,所以选择第一项。若是你的链接方式是SQL Server Authentication,请选择第二项并填写ID和password。工具

      

    (5)更改默认数据库,下一步,完成。测试

      

    (6)测试数据源网站

      

  

  2. 编程链接SQL Serverthis

    我使用的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

  程序运行结果:

   

相关文章
相关标签/搜索