Qt连接SQL Sever数据库出现 [ODBC 驱动程序管理器] 函数序列错误
平台信息
- IDE: Qt Creator
- 数据库: SQL Sever 2019
- 系统: Windows 10 专业版
问题描述
在使用Qt 的 QDataBase连接SQL Sever的时候,
数据库连接成功,但是执行sql语句时出现问题
- 错误输出如下
QSqlError("0", "QODBC3: Unable to execute statement", "[Microsoft][ODBC 驱动程序管理器] 函数序列错误")
错误代码的写法
QSqlQuery query(loaclDB);
query.exec(QString("USE Graduation SELECT LoginHistory_TB.ID, LoginHistory_TB.LoginName FROM LoginHistory_TB;");
//这里写了多次的sql执行
if(!query.exec())
{
qDebug()<<query.lastError();
}
else
{
while(query.next())
{
QString sex = query.value(0).toString();
QString name = query.value(1).toString();
qDebug()<<QString("ID: %1 Name: %2").arg(sex).arg(name);
}
}
原因分析:
- 这种写法 在读取 sqlite 数据库时候没问题
- 在SQLSever 里面会出问题
这是因为SQL Sever 数据库还未执行完毕, 但是你的程序又执行了下一条数据库语句。经排查发现是 QSqlQuery 执行sql语句是两条时候 当exec执行完第一条语句后就返回 第二条语句还在执行 所以当执行第三条语句的时候就报错了。
我的上面就连续写了两个 exe函数,导致错误
解决方案:
推荐使用QT官方的写法文章来源:https://www.toymoban.com/news/detail-452156.html
QSqlQuery query("SELECT country FROM artist");
while (query.next())
{
QString country = query.value(0).toString();
//doSomething(country);
}
上面的代码就可以改为如下文章来源地址https://www.toymoban.com/news/detail-452156.html
QSqlQuery query("USE Graduation SELECT LoginHistory_TB.ID, LoginHistory_TB.LoginName FROM LoginHistory_TB;", dataBase);
while (query.next())
{
QString sex = query.value(0).toString();
QString name = query.value(1).toString();
qDebug()<<QString("ID: %1 Name: %2").arg(sex).arg(name);
}
到了这里,关于QSqlError(“0“, “QODBC3: Unable to execute statement“, “[Microsoft][ODBC 驱动程序管理器] 函数序列错误“)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!