Qt5.2连接SQLServer2008
??
开发环境: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'" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |