我已经使用DB2 9.7(也尝试过DB2 10.5)64位库构建了我的Windows应用程序。例如:db2cli64.lib
。
我使用SQLBindCol
和SQLFetch
序列从数据库中检索数据。
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_PTR
和SQLBindCol
。
如果数据为NULL,则宏SQL_NULL_DAT
A将分配给SQL_DESC_INDICATOR_PTR
。是否有可能,此赋值仅存储前32位的值?或者库链接是不正确的还是它真的是Windows的DB2 64位库错误?
注意:使用用于MS SQL Server的ODBC驱动程序时未观察到此行为。