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

use*_*606 6 c++ sql-server qt qvariant qsqlquery

我有一个SQL查询(调用存储过程到MSSQL),它采用任意长度的BINARY类型作为参数.我正在使用QT对存储过程的支持.但根据这个,对于VARBINARY为ODBC没有相应的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();
Run Code Online (Sandbox Code Playgroud)

小智 0

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

另一种选择是在 SQL Server 中创建包装过程。向它传递一个字符串,让它将值转换为二进制并让它调用原始过程。

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