最近在做数据库的课程设计。第一个需要解决的问题是使用什么工具来实现这个系统。经过一番资料查找,决定使用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. ruby实现下订单后给客户发送手机序列号

    还有半个小时下班,写点今天做的功能,打发打发时间. 两个类,订单类和序列号类. 订单类 class GroupOrder include Mongoid::Document include Mongo ...

  2. Hibernate框架 hilo 方式配置MySQL 数据库的主键自增

    hilo(高低位方式high low)是hibernate中最常用的一种生成方式,需要一张额外的表保存hi的值.保存hi值的表至少有一条记录(只与第一条记录有关),否则会出现错误.可以跨数据库. 创建 ...

  3. MySQL常用命令操作

    1. 命令行登录使用默认3306端口的MySQL: mysql -u root -p 2. 通过TCP连接管理不同端口的多个MySQL(注意:MySQL4.1以上版本才有此项功能): mysql -u ...

  4. [转] Hadoop 2.0 详细安装过程

    1. 准备 创建用户 useradd hadoop passwd hadoop 创建相关的目录 定义代码及工具存放的路径 mkdir -p /home/hadoop/source mkdir -p / ...

  5. PHP 错误解决锦集

    Part1:Maximum execution time of 120 seconds exceeded 120秒运行超时的错误 解决办法: 方法一,修改php.ini文件 max_execution ...

  6. spring事务注解失效问题

    问题描述: 由于工作需要,需要在spring中配置两个数据源,有一天突然发现@Transactional注解失效 环境框架: springmvc+spring+spring jdbcTemplate ...

  7. 编译gRPC Go版本使用的 ProtoBuffer 文件

    本篇文章主要解决mac下安装ProtoBuffer,编译go版本gRPC用的.proto文件 安装 protoc 注意,gRPC 需要用到 proto3, 而目前 Release 的版本是 2.6.1 ...

  8. Python Django ORM 字段类型、参数、外键操作

    AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bigint自增列,必须填入参数 primary ...

  9. Python爬虫学习记录【内附代码、详细步骤】

    引言: 昨天在网易云课堂自学了<Python网络爬虫实战>,视频链接 老师讲的很清晰,跟着实践一遍就能掌握爬虫基础了,强烈推荐! 另外,在网上看到一位学友整理的课程记录,非常详细,可以优先 ...

  10. web 学习资源

    学习 https://skills.bugbank.cn/ https://github.com/JnuSimba/MiscSecNotes 靶场 http://skysec.top/2018/01/ ...