Qt 使用ODBC driver 连接SQL Server
来源:互联网 发布:java中super()的用法 编辑:程序博客网 时间:2024/06/10 08:02
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
源程序:
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 else22 {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
程序运行结果:
- Qt 使用ODBC driver 连接SQL Server
- QT连接SQL Server(ODBC)
- QT连接SQL Server(ODBC)
- QT连接SQL Server(ODBC)
- QT连接SQL Server(ODBC)
- QT连接SQL Server(ODBC)
- Qt - ODBC连接SQL SERVER
- ubuntu下使用unixODBC+ODBC Driver 11 for SQL Server 连接SQL Server
- Qt 通过ODBC连接SQL Server
- QT连接SQL Server(ODBC) qt学习网站
- 使用ODBC连接Microsoft SQL server数据库
- Qt 通过ODBC局域网内连接SQL server 2008
- [Microsoft][ODBC SQL Server Driver]l连接占线导致另一个hstmt
- [Microsoft][ODBC Sql Server Driver]无效的连接 错误解决
- MFC ODBC 连接sql server
- ODBC连接SQL SERVER数据库
- 连接失败 Sqlstate :'01000' Sql server错误:10061 [Microsoft][ODBC Sql Server Driver][TCP/IP Sockets] c
- 【C语言】使用ODBC连接Microsoft SQL server数据库
- mysql创建超级用户,更新用户权限
- 7.android Activity细节(一) onSaveInstanceState()方法使用注意点
- linux下让一个用户获得root权限
- 多个源指向一个目标,如何使数据正确。
- TIOBE 2014年9月编程语言排行榜
- Qt 使用ODBC driver 连接SQL Server
- Android开发之旅(JAVA)——JDK安装
- Java对PHP服务器hmac_sha1签名认证方法的匹配实现
- linux下出现+ ls --color=auto -l --color=auto...++ echo -ne '\033]0;root@imon-2:~'等
- 大话数据结构学习笔记(二)
- SQLite这么娇小可爱,不多了解点都不行啊
- 听故事搞懂多线程开发-- 屎壳郎老板和它的收费公厕
- 调用支付宝接口进行支付时,'错误代码为: TRADE_TOTALFEE_NOT_MATCH的错误
- 判断NVARCHAR字段中含有非Unicode字符