Qt5.2连接SQLServer2008

来源:互联网 发布:芒果tv网络电视 编辑:程序博客网 时间:2024/06/05 08:29

原帖地址: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:\Qt\Qt5.3.0\5.3\msvc2013_opengl\plugins\sqldrivers里有相应的驱动动态库
Qt5.2连接SQLServer2008 - 柳北风儿 - 柳北风儿~~~~~~~欲宇仙炅

也可以通过如下代码测试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安装包里的~\src\plugins\sqldrivers\odbc
qmake -t vclib odbc.pro
nmake   (注:windows中为mingw32-make)

编译后,在~\plugins\sqldrivers\下应该有qsqlodbcd4.dll(debug)或qsqlodbc4.dll

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



二、连接SQLServer

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

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

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

 

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

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

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

   Qt5.2连接SQLServer2008 - 柳北风儿 - 柳北风儿~~~~~~~欲宇仙炅

 

 Qt5.2连接SQLServer2008 - 柳北风儿 - 柳北风儿~~~~~~~欲宇仙炅

 

   

   

   代码:

  1. QSqlDatabase db=QSqlDatabase::addDatabase("QODBC");  
  2. db.setDatabaseName("testdsn");  
  3. db.setUserName("sa");  
  4. db.setPassword("scada");  

 

 

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

1、ODBC连接字符串

  1. //适合数据库类型 连接方式  
  2. access "Driver={microsoft access driver(*.mdb)};dbq=*.mdb;uid=admin;pwd=pass;"  
  3.   
  4. dBase "Driver={microsoft dbase driver(*.dbf)};driverid=277;dbq=------------;"  
  5.   
  6. oracle "Driver={microsoft odbc for oracle};server=oraclesever.world;uid=admin;pwd=pass;"  
  7.   
  8. MSSQL server "Driver={sql server};server=servername;database=dbname;uid=sa;pwd=pass;"  
  9.   
  10. MS text "Driver={microsoft text driver(*.txt; *.csv)};dbq=-----;extensions=asc,csv,tab,txt;Persist SecurityInfo=false;"  
  11.   
  12. Visual Foxpro "Driver={microsoft Visual Foxpro driver};sourcetype=DBC;sourceDB=*.dbc;Exclusive=No;"  
  13.   
  14. MySQL "Driver={mysql};database=yourdatabase;uid=username;pwd=yourpassword;option=16386;"  
  15.   
  16. SQLite "Driver={SQLite3 ODBC Driver};Database=D:\SQLite\*.db"  
  17.   
  18. PostgreSQL "Driver={PostgreSQL ANSI};server=127.0.0.1;uid=admin;pwd=pass;database=databaseName"  

 

2、OLEDB连接字符串

  1. //适合的数据库类型 连接方式  
  2. access "Provider=microsoft.jet.oledb.4.0;data source=your_database_path;user id=admin;password=pass;"  
  3.   
  4. oracle "Provider=OraOLEDB.Oracle;data source=dbname;user id=admin;password=pass;"  
  5.   
  6. MS SQL Server "Provider=SQLOLEDB;data source=machinename;initial catalog=dbname;userid=sa;password=pass;"  
  7.   
  8. MS text "Provider=microsof.jet.oledb.4.0;data source=your_path;Extended Properties'text;FMT=Delimited'"  

 


0 0