最近在做数据库的课程设计。第一个需要解决的问题是使用什么工具来实现这个系统。经过一番资料查找,决定使用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

    源程序:

 #include <QCoreApplication>
//#include <QtSql/QSql>
#include <QtSql/QtSql>
#include<stdio.h>
#include<stdlib.h> int main(int argc, char *argv[])
{
//QCoreApplication a(argc, argv); QString serverName = "DCKRSHW5HQU8SM1\\SQLEXPRESS";
QString dbName = "test";
QSqlDatabase myDB = QSqlDatabase::addDatabase("QODBC");//连接到ODBC驱动
QString dsn = QString("Driver={SQL Server};Server=%1;Database=%2;Trusted_Connection=yes").arg(serverName).arg(dbName);
myDB.setDatabaseName(dsn);
if(myDB.open())
{
printf("connect to server successfully\n");
myDB.close();
}
else
{
printf("connect to server failed\n");
printf("%s\n",myDB.lastError().text().toLatin1().data());
} return ; //return a.exec();
}

  如何使用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

  程序运行结果:

  

  

      

    

    

    

    

  

最新文章

  1. [转]ExtJs入门之filefield:文件上传的配置+结合Ajax完美实现文件上传的asp.net示例
  2. 【转】ZigBee是如何组网的?
  3. Sqlserver游标复习
  4. C# 事件编程在游戏开发的应用
  5. mysql之旅【第二篇】
  6. MySQL- -Join语法解析与性能分析
  7. div与&gt;div区别小结
  8. hdu 1050 Moving Tables 解题报告
  9. open行情
  10. PyQt多窗口调用
  11. 百度地图api实例
  12. react学习笔记1--基础知识
  13. 注解 @ 或者 Alt+/ 不提示 或者提示 no default propsals 解决方案
  14. HDU 1010 Tempter of the Bone DFS(奇偶剪枝优化)
  15. Tomcat 优化和性能监测
  16. PHP整理--PHP语句流程
  17. java excel大数据量导入导出与优化
  18. day048 BOM和DOM
  19. git core.autocrlf配置 解决Windows和Linux(Mac)换行问题
  20. Linux shell脚本中shift

热门文章

  1. 每天一道剑指offer-二叉树的下一个结点1
  2. unity游戏热更新总结
  3. 浅谈JS中的!=、== 、!==、===的用法和区别
  4. jquery 关于使用 append 追加 元素后 事件无法触发
  5. mysql与mysqli的一些区别和方法
  6. C#:ORM--实体框架EF(entity framework)(1)
  7. 读取配置文件-AppConfig
  8. 解决部分小程序无法获取UnionId的问题
  9. 【转】C#中continue、break和return用法
  10. java类中成员的初始化顺序(一)