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

  程序运行结果:

  

  

      

    

    

    

    

  

【原创】Qt 使用ODBC driver 连接SQL Server的更多相关文章

  1. 细聊Oracle通过ODBC数据源连接SQL Server数据库

    类似文章搜索引擎上有很多,内容大致相同,今天所谓细聊是因为我在借鉴这些文章时候走了些弯路,所以写此文,为自己备忘,同时如果能为初涉此处知识点的小伙伴提供些帮助就更好了,文章结尾处的一些扩展有一定实战意 ...

  2. 怎么查 ODBC Driver for SQL Server

    1)进入服务器,找到SQL Server 2016 Configuration... ,点进去就好了 2)

  3. Apache Doris 通过ODBC连接SQL Server

    社区有小伙伴有使用Doris ODBC外表连接SQL Server数据库,使用中遇到不知道驱动怎么安装,苦于我这边也没有SQL Server的环境,正好社区有用户使用了这个数据库,也安装ODBC驱动测 ...

  4. [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server 不存在或访问被拒绝

    一般连接sql数据库,IP_connstr="driver={SQL Server}; server=127.0.0.1;database=数据库名字;uid=sa;pwd=密码" ...

  5. php连接sql server

    这两天有个php连接sql server的项目,顺便学习学习sql server  说明: 1:PHP5.2.x本身有个php_mssql.dll的扩展用来连接Sql server,但是这个dll只是 ...

  6. thinkphp5连接sql server

    我用的环境是phpstudy,php版本是5.6,thinkphp连接sql server 方法如下: 1.修改database.php文件里的数据库信息 2.进入php扩展目录.我的是“E:\php ...

  7. python 连接 SQL Server 数据库

    #!/usr/bin/python # -*- coding:utf-8 -*- import pymssql import pyodbc host = '127.0.0.1:1433' user = ...

  8. ASP .Net Core 在 CentOS8 ARM 下连接 SQL Server 2008 R2(Hypervisor)

    本文主要记录在 ARM 系统下无法连接SQL Server 2008 R2 的解决过程. 解决方案是使用 ODBC 的方式连接数据库,进行操作. 手上有公司的华为鲲鹏云计算 ARM 架构的 CentO ...

  9. PHP5.6.15连接Sql Server 2008配置方案

    php5.6的如果想连接Sql Server 2008数据库,需要手动配置扩展和安装一个驱动. 下载SQL Server Driver for PHP的扩展包,64位系统的官方不支持,找到一个非官方的 ...

随机推荐

  1. koa2开发入门

    一.koa2入门 1.创建koa2工程 首先,我们创建一个目录hello-koa并作为工程目录用VS Code打开.然后,我们创建app.js,输入以下代码: // 导入koa,和koa 1.x不同, ...

  2. 《Tomcat日志系统详解》

    综合:Tomcat下相关的日志文件 Cataline引擎的日志文件,文件名catalina.日期.log Tomcat下内部代码丢出的日志,文件名localhost.日期.log(jsp页面内部错误的 ...

  3. [经典]网关,DNS,DHCP三者关系详解

    什么叫网关的精解 Sample Text转自(协议分析论坛)计算机主机网关的作用是什么?假设你的名字叫小不点,你住在一个大院子里,你的邻居有很多小伙伴,在门口传达室还有个看大门的李大爷,李大爷就是你的 ...

  4. Behave 基础

    在你使用behave或其他BDD框架之前, 你应该选择一个断言库. python有很多这方面的第三方库.例如: hamcrest,nose.tools,  should-dsl, sure, comp ...

  5. cordova打包APK,SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode ...

    javascript 严格模式 第一次接触let关键字,有一个要非常非常要注意的概念就是”javascript 严格模式”,比如下述的代码运行就会报错: let hello = 'hello worl ...

  6. Linux下常用的3种软件安装方式

    一:Linux源码安装    1.解压源码包文件    源码包通常会使用tar工具归档然后使用gunzip或bzip2进行压缩,后缀格式会分别为.tar.gz与.tar.bz2,分别的解压方式:   ...

  7. Web前端开发工程师常用技术网站整理

    1.常用工具相关 有道云笔记 http://note.youdao.com/signIn/index.html 36镇-最好用的共享收藏夹 http://www.36zhen.com/ 浏览器同步测试 ...

  8. C# 的逻辑运算

    &.^.!和|操作符称为逻辑操作符,用逻辑操作符把运算对象连接起来符合C#语法的式子称为逻辑表达式.逻辑 操作符“!”和“^”只作用于其后的操作数,故称为一元操作符.而“&&” ...

  9. 神奇的datetime和datetime,一毫秒引发的血案

    今天才发现C#的datetime和sqlserver的daetime是多么的不一样.首先最小和最大值不一样这是众所周知的,其实精度也是一大坑. 比如 DateTime.Today.AddMillise ...

  10. Spring Boot统一异常处理方案示例

    一.异常处理的原则 1.调用方法的时候返回布尔值来代替返回null,这样可以 NullPointerException.由于空指针是java异常里最恶心的异常. 2. catch块里别不写代码.空ca ...