ubuntu下qt连接sqlserver2008

7 篇文章 0 订阅

最近在弄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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值