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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编写外部应用程序来查询与操作数据库数据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");
//指定数据源名称为:MSSQLServer
QString 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={sql
server};server=servername;database=dbname;uid=sa;pwd=pass;"
QString dsn = QString::fromLocal8Bit("DRIVER={SQL
SERVER};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 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=y
ourpassword;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"
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'"
参考:
/community/forums/topic.asp?topic_id=523765
/bbs/read.php?tid=12414
/bbs/read.php?tid=7197&keyword=SQL%20Server。

相关文档
最新文档