原帖地址:http://blog.163.com/qimo601@126/blog/static/158220932014713112112190/
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安装包里的~srcpluginssqldriversodbc qmake -t vclib odbc.pro nmake ? (注: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()));??
- ????????return?false;??
- ????}??
- ????return?true;??
- }??
?
注意:连接数据库时,一直连不上报错: 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'"??
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|