我设法将整数值绑定(bind)到此类查询,但无法绑定(bind) QString。
我不断收到空的 QVariant。然而,在Sql服务器中我得到了我想要得到的值。
该过程将输出 VARCHAR(max)
qDebug() << query.prepare("{call dbo.p_test(?)}");
query.bindValue(0, QString(""), QSql::Out);
qDebug() << query.exec();
qDebug() << query.boundValue(0);
我尝试过绑定(bind):
''
""
QString()
QString("")
QVariant()
QVariant(QVariant::String)
我应该如何绑定(bind)值才能正确绑定(bind)?
我使用的是Qt 4.8.4
附注当这样做时,我可以获得我想要的字符串值。
query.exec("DECLARE @r VARCHAR(MAX); EXEC dbo.p_test @r OUTPUT; SELECT @r");
query.first();
qDebug()<<query.value(0);
更新
这里是如何变得非常奇怪
- 我将
QSql::Out
更改为QSql::InOut
。 - 我编辑了该过程,以便它将值插入到表中。
- 我将绑定(bind)命令更改为
query.bindValue(0, QString("1234567"), QSql::InOut);
我检查了我在sql server中传递的值,它是
'1234567'
我检查了从 qDebug()<<query.boundValue(0)
获得的值,它是
QVariant(QString, "1234")
不管我的程序应该返回
'7654321'
CREATE PROCEDURE dbo.p_test
@rez varchar(max)
BEGIN
INSERT INTO test VALUES(@rez)
SET @rez = '7654321';
END;
最佳答案
我认为你必须正确格式化输出,
qDebug() << query.boundValue(0).toString();
或者:
qDebug() << query.boundValue(0).toString().toUtf8().data();
如果您有多个有界值,则可以将 QSqlQuery::boundValues()
与列表一起使用:
list.at(i).toString().toUtf8().data()
关于c++ - 如何将 QString 绑定(bind)到调用输出 varchar 的过程的 QSqlQuery?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49489922/