SQLBindCol не работает на 64-битном Windows с "недопустимой строкой или длиной буфера" - PullRequest
0 голосов
/ 26 мая 2020

В нашем приложении есть соединения ODB C. Они вообще не работают для версии x64.

Вызов SQLBindCol из 64-битной Windows программы всегда завершается ошибкой со следующими параметрами:

void *dataPtr = new char[ 512 ] ;
SDWORD count = 0;
SQLBindCol( hstmt, 1, SQL_C_CHAR, dataPtr, 512, &count);

Удивительно то, что вместо 512 ( для BufferLength). журнал SQL показывает огромное количество -3689348818177884160:

T=1             6840-3404   ENTER SQLBindCol 
        HSTMT               0x000000000E363F40
        UWORD                        1 
        SWORD                        1 <SQL_C_CHAR>
        PTR                0x0000000000000000
        SQLLEN              -3689348818177884160
        SQLLEN *            0x000000001BA1DC82

T=1             6840-3404   EXIT  SQLBindCol  with return code 0 (SQL_SUCCESS)
        HSTMT               0x000000000E363F40
        UWORD                        1 
        SWORD                        1 <SQL_C_CHAR>
        PTR                0x0000000000000000
        SQLLEN              -3689348818177884160
        SQLLEN *            0x000000001BA1DC82 (5714869293485654016)

            DIAG [S1090] [Microsoft][ODBC Driver Manager] Invalid string or buffer length (0) 

Даже передача BufferLength 0 приводит к огромному значению, как показано в журнале SQL. Компиляция 32-битной пихты работает без проблем. Установлены 64-битные драйверы ACCESS.

1 Ответ

0 голосов
/ 26 мая 2020

Проблема была довольно простой, но ее не так-то легко найти.

Где-то в моих путях включения существовали некоторые старые версии sql .h sqlext.h sqltypes.h

** (C) Авторские права 1990 - 1995 Корпорацией Microsoft.

Задолго до 64-битных систем

Я обнаружил это с помощью параметра «Показать включает» компилятора MSV C

...