Qt连接SQL server数据库


 

Qt连接SQL server数据库


 

由于课程设计需要,需要用qt设计一个界面来操作数据库,在建立数据库连接时,期间遇到各种问题。

Qt 连接SQL server数据大致可以概括为下图的三层模型,箭头代表他们之间的依赖关系

第一步:建立目标数据库

在连接数据库之前,需要先在SQL Server中建立一个目标数据库,建立数据库和添加表的步骤这里不详述,

如建立一个名为Student 的数据库,其中有Student表、Course表和SC三个表。这里使用的是数据库版本为 SQL Server 2008 R2。


第二步:配置数据库数据源

在配置数据源之前,要确保1433号端口已打开,1433端口,是SQL Server默认的端口,SQL Server服务使用两个端口:TCP-1433、UDP-1434。其中1433用于供SQL Server对外提供服务,1434用于向请求者返回SQL Server使用了哪个TCP/IP端口。

设置SQL Server 网络配置中的TCP/IP协议为已启用状态,并且检查其默认端口是否为1433端口。


在开始菜单搜索SQL Server 配置管理器,选择SQL Server网络配置。



右键TCP/IP,选择属性查看其默认端口,设置其为1433



服务和端口设置好后接下来配置ODBC数据源。开放数据库连接(Open Database Connectivity,ODBC)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)

Qt数据库驱动并不能直接连接到SQL Server中的数据库,而是要通过配置ODBC数据源来进行连接。

开始->搜索ODBC->点击dBASE Files 选择添加



选择SQL Server



命名数据源名称并选择服务器,这里的服务器名即SQL Server 登录框中的服务器名,把它复制过来





选择登录方式为SQL Sever验证方式,并设置登录名和密码,这里选择sa(超级用户)

注意:登录名必须是数据库中已存在的登录用户


选择需要连接的数据库作为默认数据库


选择下一步 ,测试数据源,成功后单击确定。



第三步 Qt连接数据源

新建一个Qt GUI工程,在其pro文件中加入QT += sql,设计界面并设计界面

Qt 提供了多种数据的驱动,可以在帮助文档搜索sql中找到



下面是Qt帮助文档提供的连接代码:



建立连接的代码:

 

  1. #include <QApplication>  
  2. #include <QDialog>  
  3. #include"mainwindow.h"  
  4. #include<connection.h>  
  5. #include <QSqlDatabase><span style="white-space:pre">                 </span>//头文件  
  6. #include <QDebug>  
  7. #include <QMessageBox>  
  8. #include<QSqlError>  
  9.   
  10. bool OpenDatabase()  
  11. {  
  12.     QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");   //数据库驱动类型为SQL Server  
  13.     qDebug()<<"ODBC driver?"<<db.isValid();  
  14.     QString dsn = QString::fromLocal8Bit("QTDSN");      //数据源名称  
  15.     db.setHostName("localhost");                        //选择本地主机,127.0.1.1  
  16.     db.setDatabaseName(dsn);                            //设置数据源名称  
  17.     db.setUserName("sa");                               //登录用户  
  18.     db.setPassword("xwz123");                           //密码  
  19.     if(!db.open())                                      //打开数据库  
  20.     {  
  21.         qDebug()<<db.lastError().text();  
  22.         QMessageBox::critical(0, QObject::tr("Database error"), db.lastError().text());  
  23.         return false;                                   //打开失败  
  24.     }  
  25.     else  
  26.         qDebug()<<"database open success!";  
  27.     return true;  
  28. }  
  29.   
  30. int main(int argc, char *argv[])  
  31. {  
  32.     QApplication a(argc, argv);  
  33.     MainWindow w;  
  34.     if(!OpenDatabase())  
  35.         return 1;  
  36.   
  37.     w.show();  
  38.     return a.exec();  
  39. }  
#include <QApplication>
#include <QDialog>
#include"mainwindow.h"
#include<connection.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("QTDSN");      //数据源名称
    db.setHostName("localhost");                        //选择本地主机,127.0.1.1
    db.setDatabaseName(dsn);                            //设置数据源名称
    db.setUserName("sa");                               //登录用户
    db.setPassword("xwz123");                           //密码
    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数据源
  • 正确建立连接,登录名和登录密码为数据库中已存在的登录用户

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM