【发布时间】:2018-03-26 11:02:51
【问题描述】:
我设法将整数值绑定到这种类型的查询,但我无法绑定 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
附:这样做时,我可以得到我想要的字符串值。
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;
【问题讨论】:
-
在这个例子中你使用的是哪个版本的 Qt?
-
尽管我只做了一次绑定,但我已经检查了它们,它们都是空的 QVariant(, )
-
我真的认为问题在于编码,从 sql server 到 Qt 驱动程序。看起来 sql server 将 varchar 每个转换为 2 个字节,并使用绑定值的原始大小。
-
我刚刚使用 Qt 5.9.2 测试了一个例子,一切都像一个魅力,我可以得到我在程序中输出的值。 Qt4 和 Qt5 之间的主要区别是默认的 unicode。所以会努力找出问题所在,主要是重新编译插件,其次分析源码。
-
此错误存在于 Qt4 中,并已在 Qt5 中修复(因此我的问题):bugreports.qt.io/browse/QTBUG-18435
标签: c++ sql-server qt