首页 > 代码库 > Qt通过ODBC连接SQL Server2008实践总结

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
  中文名:数据源名称
DSN为ODBC定义了一个确定的数据库和必须用到的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