c++ - 如何将 QString 绑定(bind)到调用输出 varchar 的过程的 QSqlQuery?

标签 c++ sql-server qt

我设法将整数值绑定(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);

更新

这里是如何变得非常奇怪

  1. 我将 QSql::Out 更改为 QSql::InOut
  2. 我编辑了该过程,以便它将值插入到表中。
  3. 我将绑定(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/

相关文章:

c++ - Qt mac 版本缺少框架

MySQL 索引到 SQL SErver

sql-server - 针对 View 加入 : performance issues

Qt 的 moc 导致 "undefined reference to:"错误

c++ - 通过引用传递值到线程并修改

qt - 如何使用 Qt6 在 QML 中创建 DropShadow 效果?

用于计算模式出现次数的 C++ 脚本

c++ - 如何在 Arduino 上添加 time_t ?

c++ - 重新定义/隐藏局部变量有多糟糕?

sql - 如何使用 CASE 语句在 SQL Server 中创建数据透视查询?