QT连接SQLserver数据库和设置数据源名称(DSN)的方法

  • 格式:doc
  • 大小:494.00 KB
  • 文档页数:10

编写外部应用程序来查询与操作数据库数据1、打“开控制面板”,找到“管理工具”。

2、进入“管理工具”,找到“数据源(ODBC)”,双击进入“ODBC 数据库管理器”。

3、点击“添加按钮”,进入“创建新数据源向导”。

4、选择数据库驱动程序,因为是微软的SQLServer数据库,所以选择驱动为SQLServer。

点击完成。

5、进入如下页面,在名称,描述,和服务器三个位置分别自己写描述信息。

需要注意的是在输入服务器的时候,服务器的名称应该在启动SqlServer数据库管理程序时的服务器名称一样。

如下图是服务器名是5F-CAD32。

点击下一步。

6、用户登录验证,选择WindowsNT验证。

也可以用ID和密码登录但是要创建用户名和密码,创建用户名和密码方法如下图。

点击下一步。

附:在SqlServer2008的客户端创建一个登录用户的方法。

把用户角色设置为public和sysadmin系统管理者。

7、选择需要用到的数据库。

下拉列表列出了所有可以连接的数据库。

8、点击下一步。

其余选项默认,点击完成就可以。

显示下面的画面点击测试,显示测试成功。

则我们的数据源DSN创建成功。

9、写外部应用程序以ODBC方式访问数据库数据(这里写的是qt程序,要注意的是~\plugins\sqldrivers\下应该有qsqlodbcd4.dll(debug)或qsqlodbc4.dll,他们是qt访问SqlServer数据库的库文件)。

#include "mainwindow.h"#include "ui_mainwindow.h"#include <QtSql/QSqlDatabase>#include <QMessageBox>#include <QSqlError>#include <QSqlQuery>#include <QDebug>{/* 方法一:通过DSN建立连接。

DSN即数据源名称。

//下面例子sql server上的MessageFile数据库上。

程序中指定此连接的名称为dbTemp,可以随便写。

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC", "dbTemp");//指定数据源名称为:MSSQLServerQString dsn = QString::fromLocal8Bit("MSSQLServer");db.setDatabaseName(dsn);if(!db.open()) {QMessageBox::about(0, QObject::tr("Database Error"),stError().text());//如果dsn名设错,将会在db.open()时出现“[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified QODBC3: Unable to connect”//“[Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序QODBC3: Unable to connect”错误。

}*///* 方法二:通过主机名和用户名密码来建立连接。

//下面例子连接到 172.26.5.51 上的sql server名为test的数据库上。

程序中指定此连接的名称为dbTemp,可以随便写。

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC", "dbTemp2");//指定服务器主机的IP地址,即数据库在哪个电脑上。

可以是自己电脑的IP地址。

db.setHostName("172.26.5.51");//ODBC连接SQL Server驱动的格式。

"Driver={sqlserver};server=servername;database=dbname;uid=sa;pwd=pass;"QString dsn = QString::fromLocal8Bit("DRIVER={SQLSERVER};SERVER=172.26.5.51;DATABASE=test");//如果已经设定DSN,可以写为QString::fromLocal8Bit("DSN数据源名称")db.setDatabaseName(dsn);//即使dsn中已经设置了UID和PASSWD,仍然需要执行setUserName和setPassword的步骤//还要注意这里的用户名要有创建表的权限,不然创建下面的表student会不成功。

db.setUserName("aisq");db.setPassword("aisq");if(!db.open()) {QMessageBox::about(0, QObject::tr("Database Error"),stError().text());}//*/else{QSqlQuery query(db); //以下执行相关 sql语句query.exec("if exists student drop student");query.exec("create table student(id int primary key,name varchar(20))");query.exec("insert into student values(2,'xiafang')");query.exec("insert into student values(7,'wanghua')");query.exec("insert into student values(3,'aisq')");query.exec("insert into student values(4,'fucan')");query.exec("select id,name from student where id>=2");while(query.next()){int id=query.value(0).toInt(); //query.value(0)中0表示第一个字段的值,即是id的值QString name=query.value(1).toString().trimmed();qDebug()<<"id="<<id<<" "<<"name="<<name<<endl;}}db.close();}附:ODBC连接适合数据库类型连接方式access "Driver={microsoft accessdriver(*.mdb)};dbq=*.mdb;uid=admin;pwd=pass;"dBase "Driver={microsoft dbasedriver(*.dbf)};driverid=277;dbq=------------;"oracle "Driver={microsoft odbc fororacle};server=oraclesever.world;uid=admin;pwd=pass;"MSSQL server "Driver={sqlserver};server=servername;database=dbname;uid=sa;pwd=pass;"MS text "Driver={microsoft text driver(*.txt;*.csv)};dbq=-----;extensions=asc,csv,tab,txt;PersistSecurityInfo=false;"Visual Foxpro "Driver={microsoft Visual Foxprodriver};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={PostgreSQLANSI};server=127.0.0.1;uid=admin;pwd=pass;database=databaseName"OLEDB连接适合的数据库类型连接方式access "Provider=microsoft.jet.oledb.4.0;data source=your_database_path;userid=admin;password=pass;"oracle "Provider=OraOLEDB.Oracle;data source=dbname;user id=admin;password=pass;" MS SQL Server "Provider=SQLOLEDB;data source=machinename;initialcatalog=dbname;userid=sa;password=pass;"MS text "Provider=microsof.jet.oledb.4.0;data source=your_path;Extended Properties'text;FMT=Delimited'"参考:/community/forums/topic.asp?topic_id=523765/bbs/read.php?tid=12414/bbs/read.php?tid=7197&keyword=SQL%20Server。