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

    nginx可以通过向其发送信号来进行管理.默认情况下主进程的进程ID写到文件/usr/local/nginx/logs/nginx.pid中.当然也可以在配置文件中自定义该pid文件,自定义使用pid ...

  2. 【LeetCode题解】169_求众数(Majority-Element)

    目录 169_求众数(Majority-Element) 描述 解法一:暴力法 思路 Java 实现 Python 实现 复杂度分析 解法二:哈希表 思路 Java 实现 Python 实现 复杂度分 ...

  3. 【模板】 全排列 && 有重复元素的全排列

    全排列 #include<bits/stdc++.h> using namespace std; ]; void print (int n){ ;i<=n;i++) cout< ...

  4. 【转】Cookie深度解析

    Cookie简介 众所周知,Web协议(也就是HTTP)是一个无状态的协议(HTTP1.0).一个Web应用由很多个Web页面组成,每个页面都有唯一的URL来定义.用户在浏览器的地址栏输入页面的URL ...

  5. Spring系列之——spring security

    1 搭建springboot 2 配置pom依赖(springboot版本为2.1.3) <dependency> <groupId>org.springframework.b ...

  6. POJ 1284 Primitive Roots 数论原根。

    Primitive Roots Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2479   Accepted: 1385 D ...

  7. 有 a - b < c 对Java安全性的思考

    软件工程中,不论使用哪种开发语言,安全性一直是一个非常棘手却又重要的问题.安全性是软件开发领域永远的主题之一,而且随着互联网的蜂拥发展而带动的新技术的兴起与革命(比如近几年火起来的node.js,py ...

  8. 【学习笔记】--- 老男孩学Python,day13 生成器,生成器函数,各种推倒式和生成器表达式

    1. 生成器和生成器函数 生成器的本质就是迭代器 生成器的三种创建办法: 1.通过生成器函数 2.通过生成器表达式创建生成器 3.通过数据转换   2. 生成器函数: 函数中包含了yield的就是生成 ...

  9. vue的v-html插值样式问题

    content使用html插入文本和图片 使用scoped样式,渲染失败. 原因: 解决方案: 采用全局样式 或另外再加style标签单独渲染

  10. call aplly笔记

    <script> /*1.每个函数都包含两个非继承而来的方法:apply()和call(). 2.他们的用途相同,都是在特定的作用域中调用函数. 3.接收参数方面不同,apply()接收两 ...