Important: Please read the Qt Code of Conduct -

MSSQL Stored Procedure NVARCHAR OUTPUT is empty.

  • Hallo Qtler,

    ich habe eine Stored Procedure die mir NVARCHAR als Output liefern soll.
    Mein Problem ist, dass ich auf Qt - Seite eine leeres QString bekomme.
    Habe das Problem mit Qt - Version 5.3 und 5.5.1.
    Ein resize von QString bringt zwar Resultat zurück,
    aber es ist mir nicht bekannt wie groß das Rückgabewert letztendlich sein kann.

    In mehreren Blogs gefunden, dass das Problem seit Version 5 nicht mehr vorhanden ist.
    Bei mir tritt es aber trotzdem auf.

    Google Tranlate:
    Hello Qtler,

    I have a stored procedure which should give me NVARCHAR as output.
    My problem is that I get an empty QString on Qt - page a.
    Have the problem with Qt version 5.3 and 5.5.1.
    Resizing QString returns result
    but I do not know how big the return value can be.

    In several blogs, the problem is no longer available since version 5.
    But it happens to me anyway.



    QSqlDatabase database = QSqlDatabase::database(dbConnectionName);
      if (database.isValid())
        if (!database.isOpen())
      QString declareVars;
      // initialize query
      QSqlQuery qrySql(database);
      // prepare query
      // QString qry = QString("EXEC [dbo].[getValueFromDB] :p1, :p2, :p3 OUTPUT, :p4 OUTPUT");
      // :p3 = NVARCHAR(max), :p4 = INTEGER
      // for MSSqlServer only forward
      // bind values, replace placeholder from input map values
      QMapIterator<QString, QVariant> itInput(inputVars);
        //qrySql.addBindValue(itInput.value(), QSql::In);
        qrySql.bindValue(itInput.key(), itInput.value(), QSql::In);
      // bind output values, replace place holder from output map values
      QMapIterator<QString, QVariant> itOut(outputVars);
        if (itOut.value().type() == QVariant::String)
          QString outPar = itOut.value().toString();
          qrySql.bindValue(itOut.key(), outPar, QSql::Out);
          qrySql.bindValue(itOut.key(), itOut.value(), QSql::Out);
      // set cursor to begin
      // execute stored procedure
        QMapIterator<QString, QVariant> it(qrySql.boundValues());
        {// test values 
          qDebug() << it.key() << " : " << it.value().toByteArray();
        // get output values from stored procedure
        QMapIterator<QString, QVariant> itRepOut(outputVars);
          // replace values in to output map
          outputVars.insert(itRepOut.key(), qrySql.boundValue(itRepOut.key()) );

Log in to reply