QT SQL 数据类型 (QVariant) 映射为任意长度的 BINARY 类型
QT SQL datatype (QVariant) mapping for BINARY type of arbitrary length
我有一个 SQL 查询(调用存储过程到 MSSQL),它采用任意长度的 BINARY 类型,因为 argument.I 我正在使用 QT 对存储过程的支持。但是根据this,varbinary for ODBC没有对应的QT类型。
QT 需要一种在将参数传递给 sql 查询时可以转换为 QVariant 的类型。
对于字节长度 <= 8 的二进制类型,我使用了 quint64,它没有抱怨。
但是,对于任意长度的 varbinary,如果我使用 QString,我会得到这个错误:
QODBCResult::exec: Unable to execute statement: "[Microsoft][ODBC SQL Server Driver][SQL Server]Implicit conversion from data type nvarchar to binary is not allowed. Use the CONVERT function to run this query.
如果我使用 QByteArray,我会得到这个错误:
QODBCResult::exec: Unable to execute statement: "[Microsoft][ODBC SQL Server Driver][SQL Server]Invalid parameter 79 (''): Data type 0x22 is a deprecated large object, or LOB, but is marked as output parameter. Deprecated types are not supported as output parameters. Use current large object types instead."
如果有人有任何建议,那就太好了。
@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();
QT 似乎不支持当前的 SQL 服务器数据类型。您能否更改该过程,使其使用二进制值的字符串表示形式?然后您可以向它发送一个格式为“0x23ABD234”的字符串,依此类推。然后你可以在存储过程中将其更改为二进制值。
另一种选择是在 SQL 服务器中创建包装程序。传递给它一个字符串,让它将值转换为二进制并让它调用原始过程。
或者,QT 是否有任何更新以支持当前的 SQL 服务器数据类型?
我有一个 SQL 查询(调用存储过程到 MSSQL),它采用任意长度的 BINARY 类型,因为 argument.I 我正在使用 QT 对存储过程的支持。但是根据this,varbinary for ODBC没有对应的QT类型。 QT 需要一种在将参数传递给 sql 查询时可以转换为 QVariant 的类型。
对于字节长度 <= 8 的二进制类型,我使用了 quint64,它没有抱怨。
但是,对于任意长度的 varbinary,如果我使用 QString,我会得到这个错误:
QODBCResult::exec: Unable to execute statement: "[Microsoft][ODBC SQL Server Driver][SQL Server]Implicit conversion from data type nvarchar to binary is not allowed. Use the CONVERT function to run this query.
如果我使用 QByteArray,我会得到这个错误:
QODBCResult::exec: Unable to execute statement: "[Microsoft][ODBC SQL Server Driver][SQL Server]Invalid parameter 79 (''): Data type 0x22 is a deprecated large object, or LOB, but is marked as output parameter. Deprecated types are not supported as output parameters. Use current large object types instead."
如果有人有任何建议,那就太好了。
@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();
QT 似乎不支持当前的 SQL 服务器数据类型。您能否更改该过程,使其使用二进制值的字符串表示形式?然后您可以向它发送一个格式为“0x23ABD234”的字符串,依此类推。然后你可以在存储过程中将其更改为二进制值。
另一种选择是在 SQL 服务器中创建包装程序。传递给它一个字符串,让它将值转换为二进制并让它调用原始过程。
或者,QT 是否有任何更新以支持当前的 SQL 服务器数据类型?