加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

Qt5.2连接SQLServer2008

发布时间:2020-12-12 13:03:54 所属栏目:MsSql教程 来源:网络整理
导读:?? 开发环境:Qt5.2+SQLServer2008(企业版) 一、首先要让你的qt支持SQLServer,也就是安装Qt的时候,编译了SQLServer的驱动 QT提供了对多种数据库的访问支持,要想顺利访问SQL Server。 首先要保证以下几点: 1. 确定QT编译时已经编译了QtSql。 (默认的qt5
??

开发环境:Qt5.2+SQLServer2008(企业版)

一、首先要让你的qt支持SQLServer,也就是安装Qt的时候,编译了SQLServer的驱动

QT提供了对多种数据库的访问支持,要想顺利访问SQL Server。首先要保证以下几点:

1. 确定QT编译时已经编译了QtSql。(默认的qt5,都已经支持了,如下目录:C:QtQt5.3.05.3msvc2013_openglpluginssqldrivers里有相应的驱动动态库

也可以通过如下代码测试qt5是否支持SqlServer

#include?<QApplication>??

#include?<QSqlDatabase>??

#include?<QStringList>??

#include?<QDebug>??

int?main(int?argc,?char*?argv[])?????

{????

?????QApplication?app(argc,?argv);????

?????qDebug()?<<?"Available?drivers:";????

?????QStringList?drivers?=?QSqlDatabase::drivers();????

?????foreach(QString?driver,?drivers)??//列出Qt5所有支持的数据库类型

??????????qDebug()?<<?"t"?<<?driver;????

?????QSqlDatabase?db?=?QSqlDatabase::addDatabase("QODBC");????

?????qDebug()?<<?"ODBC?driver?valid?"?<<?db.isValid();??//true为支持

}???

?输出结果如下:

"QSQLITE""QMYSQL""QMYSQL3""QODBC""QODBC3""QPSQL""QPSQL7"ODBC driver valid? true

2. 若是没有编译,可以手动编译了qt的ODBC插件

可以通过编译qt的时候加上 configure -plugin-sql-odbc来保证,也可以单独编译qt安装包里的~srcpluginssqldriversodbcqmake -t vclib odbc.pronmake ? (注:windows中为mingw32-make)编译后,在~pluginssqldrivers下应该有qsqlodbcd4.dll(debug)或qsqlodbc4.dll

此时,可以用下面的程序,测试一下你的QT目前支持哪些数据库访问。

二、连接SQLServer

? ? ? ?要注意的就是连接数据库时使用的数据库名,sqlserver和sqlite、mysql等是不同的,并不是直接写入数据库名称。 而是DSN名。 如果你已经设置好了DSN,可以直接输入DSN名。 如果没有,可以采用DSN连接字符串直接连接ODBC数据库。

1、直接设定DSN的字符串连接数据库,很简单。

/**

?*函数介绍:创建数据库连接

?*输入参数:

?*返回值:无

?*/

bool?DataAccess::createConnection()??

{??

????QStringList?drivers?=?QSqlDatabase::drivers();??

????foreach(QString?driver,?drivers)??

????????qDebug()?<<?"t"?<<?driver;??

????QSqlDatabase?db?=?QSqlDatabase::addDatabase("QODBC");??

????qDebug()?<<?"ODBC?driver?valid?"?<<?db.isValid();??

//?注意,对于express版本数据库,?一定要加sqlexpress这种后缀?SERVER=58.67.161.109sqlexpress?

????QString?dsn?=?"DRIVER={SQL?SERVER};SERVER=58.67.161.109;DATABASE=RDBS;UID=RDBS_USER;PWD=RDBS_USER_7010387;";??

????db.setHostName("58.67.161.109");???//数据库服务器,我这里不需要

//即使dsn中已经设置了UID和PASSWD,仍然需要执行setUserName和setPassword的步骤?

//还要注意这里的用户名要有创建表的权限,不然创建下面的表student会不成功。

????db.setDatabaseName(dsn);???//数据库名

????db.setUserName("RDBS_USER");//登录名,我再dsn里设置UID和PWD后,就不需要设置了

????db.setPassword("RDBS_USER_7010387");//密码,我再dsn里设置UID和PWD后,就不需要设置了

if(!db.open?())??

????{ ?

????????QSqlError?error?=?db.lastError();??

????????QMessageBox::warning?(0,?"Warning",?QString("Failed?to?open?database!Error:%1").arg(error.text()));??

returnfalse;??

????}??

returntrue;??

}??

注意:连接数据库时,一直连不上报错: ConnectionOpen (Invalid Instance()),连接无效,结果发现微软对express版本数据库是有限制的,在SERVER字段添加sqlexpress这样后缀,连接OK。

2、手动设置ODBC数据源,然后制定DSN

控制面板->系统和安全->管理工具->数据源(ODBC)

? ?代码:

QSqlDatabase?db=QSqlDatabase::addDatabase("QODBC");??

db.setDatabaseName("testdsn");??

db.setUserName("sa");??

db.setPassword("scada");??

三、下面是ODBC和OLEDB的连接字符串写法:

1、ODBC连接字符串

//适合数据库类型?连接方式

access?"Driver={microsoft?access?driver(*.mdb)};dbq=*.mdb;uid=admin;pwd=pass;"

dBase?"Driver={microsoft?dbase?driver(*.dbf)};driverid=277;dbq=------------;"

oracle?"Driver={microsoft?odbc?for?oracle};server=oraclesever.world;uid=admin;pwd=pass;"

MSSQL?server?"Driver={sql?server};server=servername;database=dbname;uid=sa;pwd=pass;"

MS?text?"Driver={microsoft?text?driver(*.txt;?*.csv)};dbq=-----;extensions=asc,csv,tab,txt;Persist?SecurityInfo=false;"

Visual?Foxpro?"Driver={microsoft?Visual?Foxpro?driver};sourcetype=DBC;sourceDB=*.dbc;Exclusive=No;"

MySQL?"Driver={mysql};database=yourdatabase;uid=username;pwd=yourpassword;option=16386;"

SQLite?"Driver={SQLite3?ODBC?Driver};Database=D:SQLite*.db"

PostgreSQL?"Driver={PostgreSQL?ANSI};server=127.0.0.1;uid=admin;pwd=pass;database=databaseName"

2、OLEDB连接字符串

//适合的数据库类型?连接方式

access?"Provider=microsoft.jet.oledb.4.0;data?source=your_database_path;user?id=admin;password=pass;"

oracle?"Provider=OraOLEDB.Oracle;data?source=dbname;user?id=admin;password=pass;"

MS?SQL?Server?"Provider=SQLOLEDB;data?source=machinename;initial?catalog=dbname;userid=sa;password=pass;"

MS?text?"Provider=microsof.jet.oledb.4.0;data?source=your_path;Extended?Properties'text;FMT=Delimited'"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读