为什么即使使用64位库,DB2 SQLFetch也只返回32位大小的SQL_NULL_DATA

时间:2017-01-19 10:52:50

标签: c++ db2 odbc db2-luw

我已经使用DB2 9.7(也尝试过DB2 10.5)64位库构建了我的Windows应用程序。例如:db2cli64.lib

我使用SQLBindColSQLFetch序列从数据库中检索数据。

SQLBindCol(hStmt,
           index,
           deftyp,
           data,
           deflen,
           &len_ind_ptr)

................

SQLFetch()

.................

if(len_ind_ptr == SQL_NULL_DATA)

如果检索到的数据为NULL,则上述条件总是失败。 len_ind_ptr的类型为SQLLEN,调试时我可以看到SQLLEN在运行时变为__int64

SQLFetch返回给该变量的值是32位(在我的64位环境中,它保存的值为4294967295,不等于-1)。

在文档中,当我使用len_ind_ptr时,我发现指针SQL_DESC_INDICATOR_PTR将分配给两个描述符SQL_DESC_OCTET_LENGTH_PTRSQLBindCol

如果数据为NULL,则宏SQL_NULL_DAT A将分配给SQL_DESC_INDICATOR_PTR。是否有可能,此赋值仅存储前32位的值?或者库链接是不正确的还是它真的是Windows的DB2 64位库错误?

注意:使用用于MS SQL Server的ODBC驱动程序时未观察到此行为。

0 个答案:

没有答案