日期:2014-05-16  浏览次数:21086 次

sql server 退出时这个"QODBCDriver::disconnect: Unable to disconnect datasource"
连接sql server 执行一些操作后,退出exe时,报错:如下

"QODBCDriver::disconnect: Unable to disconnect datasource" Error: "[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionClose (closesocket()). [Microsoft][ODBC SQL Server Driver][DBNETLIB]"

"QODBCDriver::cleanup: Unable to free connection handle" Error: "[Microsoft][ODBC 驱动程序管理器] 函数序列错误" 

"QODBCDriver::cleanup: Unable to free environment handle" Error: "[Microsoft][ODBC 驱动程序管理器] 函数序列错误" 

------解决方案--------------------
这个可能是驱动程序中的bug导致的
------解决方案--------------------
对了,你用的是qt来连接sql server的把,

能把你的语句贴出来看看不,有可能是语句写的有问题导致的
------解决方案--------------------
引用:
Quote: 引用:

对了,你用的是qt来连接sql server的把,

能把你的语句贴出来看看不,有可能是语句写的有问题导致的

dsn这句话有点乱,你好好看看

QString dsn = QString("Driver={sql server};
SERVER=%1;PORT=%2;DATABASE=%3;UID=%4;PWD=%5;")
.arg(m_host).arg(m_port).arg(m_dbName).arg(m_user).arg(m_passwd);  

看起来是ODBC的问题,你用的ODBC是最新的驱动吗?用其他驱动可以吗比如OLEDB。
------解决方案--------------------
引用:
Quote: 引用:

对了,你用的是qt来连接sql server的把,

能把你的语句贴出来看看不,有可能是语句写的有问题导致的


InitDBXMLConfig(); //读入配置文件,就是数据库名字,地址,用户名之类的dsn的值
m_db_odbc = QSqlDatabase::addDatabase("QODBC",tr("QODBC"));
QString dsn = QString("Driver={sql server};SERVER=%1;PORT=%2;DATABASE=%3;UID=%4;PWD=%5;").arg(m_host).arg(m_port).arg(m_dbName).arg(m_user).arg(m_passwd);  
m_db_odbc.setDatabaseName(dsn);
if (!m_db_odbc.open()) 
{
QSqlError err = m_db_odbc.lastError();
m_db_odbc.close();
QMessageBox::critical(NULL,tr("提示"),err.text());
}


我查了一下,这种用odbc来连接sql server的,好像没有port参数的,直接在server中指定参数就可以:

"Driver={sql server};server=servername;database=dbname;uid=sa;pwd=pass;"

也就是类似于这样:server=192.168.1.16,1433