Qt连接SQL Server 2014数据库
1. 建立目标数据库
连接数据库之前,需先在SQL Server中建立一个目标数据库,建立数据库和添加表的步骤这里不详述。
如建立一个名为DataBase的数据库,其中有heart1表、heart2表和heartHD三个表。这里使用的是数据库版本为 SQL Server 2014 R2。
2. 配置数据库数据源
在配置数据源之前,要确保数据库1433号端口已打开,1433端口是SQL Server的默认端口,SQL Server服务使用两个端口:TCP-1433、UDP-1434。其中1433用于供SQL Server对外提供服务,1434用于向请求者返回SQL Server使用了哪个TCP/IP端口。
设置SQL Server 网络配置中的TCP/IP协议为已启用状态,并且检查其默认端口是否为1433端口。具体设置步骤如下图:
服务和端口设置好后,接下来配置ODBC数据源。开放数据库连接(Open Database Connectivity,ODBC)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。
Qt数据库驱动并不能直接连接到SQL Server中的数据库,而是要通过配置ODBC数据源来进行连接。具体设置步骤如下图:
点击dBASE Files,选择添加:
选择SQL Server:
命名数据源名称并选择服务器,这里的服务器名即SQL Server 登录框中的服务器名,把它复制过来:
选择登录方式为SQL Sever验证方式,并设置登录名和密码,这里选择sa(超级用户):
注意:登录名必须是数据库中已存在的登录用户。
选择需要连接的数据库作为默认数据库:
选择下一步,选择“测试数据源”,成功后单击确定。
3. Qt连接数据源
新建一个Qt GUI工程,在其pro文件中加入QT += sql,并设计界面。
下面是Qt帮助文档提供的连接代码:
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
db.setHostName("acidalia");
db.setDatabaseName("customdb");
db.setUserName("mojito");
db.setPassword("J0a1m8");
bool ok = db.open();
建立连接的代码:
#include <QApplication>
#include <QDialog>
#include"mainwindow.h"
#include <QSqlDatabase>
#include <QDebug>
#include <QMessageBox>
#include<QSqlError>
bool OpenDatabase()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); //数据库驱动类型为SQL Server
qDebug()<<"ODBC driver?"<<db.isValid();
QString dsn = QString::fromLocal8Bit("DataBase"); //数据源名称
db.setHostName("localhost"); //选择本地主机,127.0.1.1
db.setDatabaseName(dsn); //设置数据源名称
db.setUserName("sa"); //登录用户
db.setPassword("1234"); //密码
if(!db.open()) //打开数据库
{
qDebug()<<db.lastError().text();
QMessageBox::critical(0, QObject::tr("Database error"), db.lastError().text());
return false; //打开失败
}
else
qDebug()<<"database open success!";
return true;
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
if(!OpenDatabase())
return 1;
w.show();
return a.exec();
}
到此,Qt就连接上数据库了,其他数据库连接过程类似。
- 在连接过程中需注意的几个问题:
- 确保1433号端口已经打开;
- 确认SQL Server 网络配置的TCP/IP协议已启用;
- 正确配置ODBC数据源;
- 正确建立连接,登录名和登录密码为数据库中已存在的登录用户。