QT SQL数据类型(QVariant)映射为任意长度的BINARY类型

时间:2017-05-29 09:44:31

标签: c++ sql-server qt qsqlquery qvariant

我有一个SQL查询(调用存储过程到MSSQL),它将任意长度的BINARY类型作为参数。我正在使用QT对存储过程的支持。但根据this,ODBC的varbinary没有相应的QT类型。 QT需要一种在将参数传递给sql查询时可以转换为QVariant的类型。

对于以字节为单位的二进制类型< = 8,我使用了quint64,并且它没有抱怨。

但是,对于任意长度varbinary,如果我使用QString,我会收到此错误:

  

QODBCResult :: exec:无法执行语句:" [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]不允许从数据类型nvarchar到二进制的隐式转换。使用CONVERT函数运行此查询。

如果我使用QByteArray,我会收到此错误:

  

QODBCResult :: exec:无法执行语句:" [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]无效参数79(''):数据类型0x22不推荐使用大对象或LOB,但标记为输出参数。不支持不推荐使用的类型作为输出参数。请改用当前的大对象类型。"

如果有人有任何建议会很好。

@a binary(2) = NULL,
@b binary(5) = NULL,
@c binary(3) = NULL,
@d binary(3) = NULL,
@e binary(8) = NULL,
@f binary(32) = NULL,

QSqlQuery query(QSqlDatabase::database(dbname));
setQueryStatement(queryString);
prepareQuery(query);
query.bindValue(":f",/* what datatype variable should i put here */);
query.exec();

1 个答案:

答案 0 :(得分:0)

看起来像QT不支持当前的SQL Server数据类型。您是否可以更改该过程,使其可以使用二进制值的字符串表示形式?然后,您可以将其发送为格式为'0x23ABD234'的字符串,依此类推。然后可以在存储过程中将其更改为二进制值。

另一个选择是在SQL Server中创建包装程序。将其传递给字符串,将其转换为二进制值,然后调用原始过程。

或者,是否对QT有任何更新以支持当前的SQL Server数据类型?