ubuntu下qt连接sqlserver2008

来源:互联网 发布:淘宝网店现状 编辑:程序博客网 时间:2024/05/16 13:46

最近在弄qt连接sqlserver2008,总是出现如下错误提示.

[unixODBC][Driver Manager]Data source name not found, and no default driver specified QODBC3: Unable to connect

对于上述错误,我在网上找遍了,也没有找到结果.但是最后被我偶然试出来了.特此记录一下,给日后提醒.


相关的测试库,odbc,freetds,qt等等库都是要装的


首先是下面配置文件,要确保正确.

# vim /etc/freetds/freetds.conf 

[factorytest]
        host = 192.168.1.7
        port = 1433
        tds version = 8.0

# vim /etc/odbc.ini 
[factorytest]
Driver          = SQLServer
Description     = SQLServer
Server          = 192.168.1.7
Database        = factorytest
Port            = 1433


# vim /etc/odbcinst.ini 


[ODBC]
Trace           = Yes
TraceFile       = /tmp/sql.log
ForceTrace      = Yes
Pooling         = No

[SQLServer]
Description     = SQLServer
Driver          = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup           = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
UsageCount      = 1
CPTimeout       = 5
CPReuse         = 5
FileUsage       = 1


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

下面是测试连接的代码




// http://stackoverflow.com/questions/12660406/connecting-to-sql-server-2005-through-qt-c


#include<QtCore/QCoreApplication>
#include<QWidget>
#include<ostream>
#include<iostream>
#include<QFile>
#include<QTime>
#include<stdio.h>
#include<QTextStream>
#include<QSqlDatabase>
#include<QSqlError>
#include<QSqlDriver>
#include<QDebug>


using namespace std;


QString buildDSN(QString server, QString database, QString username, QString password)
{
    QString dsn = QString("DRIVER={SQLSERVER};SERVER=%1;TDS_VERSION=8.0;PORT=1433;DATABASE=%2;UID=%3;PWD=%4;")
        .arg(server).arg(database).arg(username).arg(password);
    
    return dsn;
}


int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);
    
    qDebug() << "Available drivers:";
    QStringList drivers = QSqlDatabase::drivers();
    for(int i = 0; i < drivers.size(); i++)
    {
        qDebug() << drivers[i];
    }
    
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC", "factorytest");
//    QString dsn = QString::fromLocal8Bit(
//        "DRIVER={SQL SERVER};"
//        "SERVER=192.168.1.7;"
//        "DATABASE=factorytest;"
//        "UID=sa;"
//        "PWD=root;");
#if 0
//"DRIVER={FreeTDS};"
    QString dsn = QString("DRIVER={SQLSERVER};"
 "SERVER=192.168.1.7;"
                          "TDS_VERSION=8.0;"
                          "PORT=1433;"
                          "DATABASE=factorytest;"
                          "UID=sa;"
                          "PWD=root;");
        
//    QString dsn = "factorytest";
    db.setHostName("192.168.1.7");
    db.setPort(1433);
    db.setDatabaseName(dsn);
    db.setUserName("sa");
    db.setPassword("root");
#endif
    
#if 1
    QString server = "192.168.1.7";
    QString database = "factorytest";
    QString username = "sa";
    QString password = "root";
db.setDatabaseName(buildDSN(server, database, username, password));
#endif
    
    bool test = db.isValid();//true
    cout << "test = " << test << endl;
    
    bool r = db.open();
    if(r)
    {
        cout << endl << "+connected [OK]" << endl;
    }
    else
    {
        cout << endl << "-connected [NG]" << endl;
        QString error = db.lastError().text();
        cout << error.toLocal8Bit().data() << endl;;
    }
    
    return 0; //app.exec();
}


0 0
原创粉丝点击