SQLBindCol在64位Windows上失败,出现 "无效字符串或缓冲区长度"。

问题描述 投票:0回答:1

在我们的应用程序中,我们有ODBC连接。这些连接在x64版本中根本无法工作。

在64位的Windows程序中调用SQLBindCol总是失败,参数如下。

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

令人惊讶的是,SQL日志显示的是一个巨大的数字-3689348818177884160,而不是512(BufferLength)。

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驱动。

c++ winapi odbc
1个回答
0
投票

问题很简单--但不是那么容易找到。

在我的包含路径中的某个地方,确实存在着一些旧版本的sql.h sqlext.h sqltypes.h。

** (C) Copyright 1990 - 1995 By Microsoft Corp.

早在64位系统之前

我通过使用MSVC编译器的 "显示包含 "选项发现了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.