• Qt通过ODBC连接SQL Server2008实践总结


    Qt连接数据库的方式很多,这里说明一种最常用也是最实用的方式,因为这种方式在Windows上开发程序使用起来非常方便,并且也是远程连接数据库所需要用到的方式。

     

    前提工作:

    在Win7下安装了SQL Server 2008,并在SQL Server中创建了数据库MyDB。

    Qt通过ODBC连接SQL Server 2008概述:

    Qt通过ODBC连接数据库时,使用的数据库名不是直接写入数据库名称,而是DSN名。

    关于DSN的简要介绍:

    原名:Data Source Name
      中文名:数据源名称
    DSNODBC定义了一个确定的数据库和必须用到的ODBC驱动程序。每个ODBC驱动程序定义为该驱动程序支持的一个数据库创建DSN需要的信息。就是说安装ODBC驱动程序以及创建一个数据库之后,必须创建一个DSN。

    DSN名的使用方式有两种:

    1、在操作系统中配置DSN;

    2、在Qt程序代码中采用DSN连接字符串直接连接ODBC数据库。

    下面详细介绍在操作系统中配置DSN方式下连接SQL Server 2008的操作过程

    在操作系统中配置DSN

    1、在Win7系统中配置DSN详细图解

    image

    image

    image

    image

    image

    image

    image

    image

    image

    2、配置好DSN后就可以在Qt程序中使用此DSN连接数据库了:

    其中main.cpp代码如下:

    #include <QtGui/QApplication>

    #include "dialog.h"
    #include <QSqlDatabase>
    #include <QStringList>
    #include <QDebug>
    #include <QMessageBox>
    #include <QtSql>
    #include <QSqlQuery>
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        Dialog w;
        w.show();
        QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
        qDebug()<<"ODBC driver?"<<db.isValid();
        QString dsn = QString::fromLocal8Bit("QTDSN");
        db.setHostName("127.0.0.1");
        db.setDatabaseName(dsn);
        db.setUserName("sa");
        db.setPassword("198811200");
        if(!db.open())
        {
            qDebug()<<db.lastError().text();
            QMessageBox::critical(0, QObject::tr("Database error"), db.lastError().text());
            return false;
        }
        else
            qDebug()<<"database open success!";
        QSqlQuery query(db);
        query.exec("select * from student");
        while(query.next())
        {
            //qDebug()<<query.value(0).toString();
            qDebug()<<query.value(1).toString();
            //qDebug()<<query.value(2).toString();
            //qDebug()<<query.value(3).toString();
            //qDebug()<<" ";
        }
        return a.exec();
    }

    测试输出结果:

    ODBC driver? true

    database open success!

    "李四 "

    "王五 "

    "赵六 "

    "吴莉莉 "

    "刘晓红 "

    "陈丽芬 "

    "正如因 "

    "zhu "

    参考:

    http://www.xuebuyuan.com/619048.html

    http://hi.baidu.com/hzau_edu/item/091aa61a12b4e98488a956a5

    http://blog.163.com/luminary_fan/blog/static/1941080892013069100349/

    http://wenku.baidu.com/link?url=8752chxOKRLOJ4yXwZGlwRUbWhvkNDwVioZd0ZwGMGizQDclNsvtnb8137LGXtce_vqNPY1miJAk9H7ZcyOEVYL1LdFOCY8YpMxx83VsKEK

    如果出现错误,请确认如下配置正确:

    1、

    image

    建议将SQL Server(MYSQLSERVER)、SQL Server(SQLEXPRESS)服务停止,避免冲突。

    2、

    image

    注意:更改配置后,务必重新启动数据库服务器

    image

  • 相关阅读:
    js中“==”与“===”区别
    java中的除法及求余运算特殊性。
    oracle数据库查询历史某一时刻的表数据
    Java多线程总结(转载)
    I/O之Writer-Reader
    I/O之File
    MYSQL之內链接 左链接 右链接 区别
    ubuntu下编译boost
    linux下编译安装boost库
    搭建无线弱网测试环境
  • 原文地址:https://www.cnblogs.com/nufangrensheng/p/3816474.html
Copyright © 2020-2023  润新知