最近在弄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 #include #include #include #include #include #include #include #include #include #include #include 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(); }