我设法将整数值绑定到这种类型的查询,但我无法设法绑定QString。
我一直空着QVariant。但是,在Sql server中,我得到了我想要的值。
该过程将输出VARCHAR(max)
qDebug() << query.prepare("{call dbo.p_test(?)}");
query.bindValue(0, QString(""), QSql::Out);
qDebug() << query.exec();
qDebug() << query.boundValue(0);
我试过绑定:
''
""
QString()
QString("")
QVariant()
QVariant(QVariant::String)
我应该如何绑定值才能正确绑定?
我正在使用Qt 4.8.4
P.S。这样做的时候我可以得到我想要的字符串值。
query.exec("DECLARE @r VARCHAR(MAX); EXEC dbo.p_test @r OUTPUT; SELECT @r");
query.first();
qDebug()<<query.value(0);
更新
这里是如何变得非常怪异的
QSql::Out
更改为QSql::InOut
。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;
答案 0 :(得分:1)
我认为你必须正确格式化输出,
qDebug() << query.boundValue(0).toString();
或:
qDebug() << query.boundValue(0).toString().toUtf8().data();
如果您的值超过限定值,则可以将QSqlQuery::boundValues()
与列表一起使用:
list.at(i).toString().toUtf8().data()
答案 1 :(得分:0)
如评论中所述
此错误出现在Qt4中并在Qt5中修复(因此我的问题):bugreports.qt.io/browse/QTBUG-18435 - jbh 3月27日9:54
这真是一个错误,无法在Qt4中解决它。
Qt4太多了,我今天又找到了3个bug -_-不幸我。