如何将QString绑定到调用输出varchar的程序的QSqlQuery?

时间:2018-03-26 11:02:51

标签: c++ sql-server qt

我设法将整数值绑定到这种类型的查询,但我无法设法绑定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);

更新

这里是如何变得非常怪异的

  1. 我将QSql::Out更改为QSql::InOut
  2. 我编辑了程序,因此它会将值插入表格中。
  3. 我将bind命令更改为query.bindValue(0, QString("1234567"), QSql::InOut);
  4. 我检查了我在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;
    

2 个答案:

答案 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 -_-不幸我。