QSqlQuery 调用 MySQL 的存储过程时,无法获取数据集?
QSqlQuery 调用 MySQL 的存储过程时,无法获取数据集?
存储过程中是一个SELECT * FROM table; 的语句,是为了返回一个数据集。
但 QSqlQuery 在 exec() 成功后,isSelect() 返回为 false,同时 sqlRecord() & sqlResult() 中也没有包含任何数据集的信息。
同样的代码连接到 MS SQLServer2008 时,完全正常的使用。
当我把SQL都放在存储过程中,请教这个问题如何解决?
[解决办法]
助手里有这么一句话:
QMYSQL Stored Procedure Support
MySQL 5 introduces stored procedure support at the SQL level, but no API to control IN, OUT and INOUT parameters. Therefore, parameters have to be set and read using SQL commands instead of QSqlQuery::bindValue().
Example stored procedure:
create procedure qtestproc (OUT param1 INT, OUT param2 INT)
BEGIN
set param1 = 42;
set param2 = 43;
END
Source code to access the OUT values:
QSqlQuery q;
q.exec("call qtestproc (@outval1, @outval2)");
q.exec("select @outval1, @outval2");
q.next();
qDebug() << q.value(0) << q.value(1); // outputs "42" and "43"
Note: @outval1 and @outval2 are variables local to the current connection and will not be affected by queries sent from another host or connection.