Я построил свое приложение для Windows с 64-битными библиотеками DB2 9.7 (пробовал также и DB2 10.5). Пример: 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
А будет присвоен SQL_DESC_INDICATOR_PTR
, Возможно ли, что это назначение хранит значение только в первых 32 битах? или связывание библиотек неверно, или это действительно ошибка 64-битной библиотеки DB2 в Windows?
Примечание. Такое поведение не наблюдается с драйверами ODBC, используемыми для MS SQL Server.
Задача ещё не решена.
Других решений пока нет …