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

Qt5.2连接SQLServer2008

发布时间:2020-12-12 12:59:58 所属栏目:MsSql教程 来源:网络整理
导读:原帖地址:http://blog.163.com/qimo601@126/blog/static/158220932014713112112190/ Qt5.2连接SQLServer2008 ? 开发环境:Qt5.2+SQLServer2008(企业版) 一、首先要让你的qt支持SQLServer,也就是安装Qt的时候,编译了SQLServer的驱动 ? ? ? QT提供了对多种

原帖地址: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
  1. ???
  2. #include?<QApplication>????
  3. #include?<QSqlDatabase>????
  4. #include?<QStringList>????
  5. #include?<QDebug>????
  6. int?main(int?argc,?char*?argv[])?????
  7. {????
  8. ?????QApplication?app(argc,?argv);????
  9. ?????qDebug()?<<?"Available?drivers:";????
  10. ?????QStringList?drivers?=?QSqlDatabase::drivers();????
  11. ?????foreach(QString?driver,?drivers)??//列出Qt5所有支持的数据库类型??
  12. ??????????qDebug()?<<?"t"?<<?driver;????
  13. ????
  14. ?????QSqlDatabase?db?=?QSqlDatabase::addDatabase("QODBC");????
  15. ?????qDebug()?<<?"ODBC?driver?valid?"?<<?db.isValid();??//true为支持??
  16. }???

?

?输出结果如下: "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的字符串连接数据库,很简单。

    /**?
  1. ?*函数介绍:创建数据库连接?
  2. ?*输入参数:?
  3. ?*返回值:无?
  4. ?*/??
  5. bool?DataAccess::createConnection()??
  6. {??
  7. ????QStringList?drivers?=?QSqlDatabase::drivers();??
  8. ????foreach(QString?driver,?drivers)??
  9. ????????qDebug()?<<?"t"?<<?driver;??
  10. ????QSqlDatabase?db?=?QSqlDatabase::addDatabase("QODBC");??
  11. ??
  12. ????qDebug()?<<?"ODBC?driver?valid?"?<<?db.isValid();??
  13. ????//?注意,对于express版本数据库,?一定要加sqlexpress这种后缀?SERVER=58.67.161.109sqlexpress???
  14. ????QString?dsn?=?"DRIVER={SQL?SERVER};SERVER=58.67.161.109;DATABASE=RDBS;UID=RDBS_USER;PWD=RDBS_USER_7010387;";??
  15. ????db.setHostName("58.67.161.109");???//数据库服务器,我这里不需要??
  16. ????//即使dsn中已经设置了UID和PASSWD,仍然需要执行setUserName和setPassword的步骤???
  17. ????//还要注意这里的用户名要有创建表的权限,不然创建下面的表student会不成功。??
  18. ????db.setDatabaseName(dsn);???//数据库名??
  19. ????db.setUserName("RDBS_USER");//登录名,我再dsn里设置UID和PWD后,就不需要设置了??
  20. ????db.setPassword("RDBS_USER_7010387");//密码,我再dsn里设置UID和PWD后,就不需要设置了??
  21. ????if(!db.open?())??
  22. ????{ ???
  23. ????????QSqlError?error?=?db.lastError();??
  24. ????????QMessageBox::warning?(0,?"Warning",?QString("Failed?to?open?database!Error:%1").arg(error.text()));??
  25. ????????return?false;??
  26. ????}??
  27. ????return?true;??
  28. }??

?

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

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

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

? ?

?

?

?

? ?

? ?

? ?代码:

    QSqlDatabase?db=QSqlDatabase::addDatabase("QODBC");??
  1. db.setDatabaseName("testdsn");??
  2. db.setUserName("sa");??
  3. 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'"??
  • (编辑:李大同)

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

      推荐文章
        热点阅读