代码之家  ›  专栏  ›  技术社区  ›  RED SOFT ADAIR

SQLBindCol在64位窗口上失败,其“字符串或缓冲区长度无效”

  •  0
  • RED SOFT ADAIR  · 技术社区  · 6 年前

    在我们的应用程序中,我们有ODBC连接。这些对于x64版本根本不起作用。

    从64位Windows程序调用SQLBindCol时始终失败,参数如下:

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

    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日志所示。 编译fir 32位代码没有问题。

    0 回复  |  直到 6 年前
        1
  •  0
  •   RED SOFT ADAIR    6 年前

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

    sqlext.hsqltypes.h

    **(C)微软公司1990-1995年版权所有。

    我通过使用MSVC编译器的“Show Includes”选项发现了这一点