如何确定SQLBindCol的正确缓冲区大小

如何确定SQLBindCol的正确缓冲区大小,c,odbc,buffer,unixodbc,C,Odbc,Buffer,Unixodbc,SQLBindCol函数需要缓冲区长度(对于某些缓冲区类型,如字符串): 我如何知道应该分配多少字节 我能想到的唯一一件事是使用SQLGetDescField获取SQL\u DESC\u LENGTH,但是我必须执行两次查询。由于我混淆了函数的运行顺序,正确的顺序是: SQLBindParameter SQLExecDirect SQLBindCol 对于SQLBindParameter(至少对于输入参数),在执行语句之前,长度是已知的 在SQLExecDirect之后,可以使用SQLNumR

SQLBindCol
函数需要缓冲区长度(对于某些缓冲区类型,如字符串):

我如何知道应该分配多少字节


我能想到的唯一一件事是使用
SQLGetDescField
获取
SQL\u DESC\u LENGTH
,但是我必须执行两次查询。

由于我混淆了函数的运行顺序,正确的顺序是:

  • SQLBindParameter
  • SQLExecDirect
  • SQLBindCol
  • 对于
    SQLBindParameter
    (至少对于输入参数),在执行语句之前,长度是已知的

    SQLExecDirect
    之后,可以使用
    SQLNumResultCols
    SQLGetDescField
    函数来确定列的数量、它们的数据类型、长度等


    SQL92/CLI(调用级别接口)文档在附录
    B.2 Interactive Query
    中有一个示例,它使用
    SQLDescribeCol
    获取长度。

    在绑定之前调用SQLDescribeCol

    SQLRETURN SQLBindCol(
          SQLHSTMT       StatementHandle,
          SQLUSMALLINT   ColumnNumber,
          SQLSMALLINT    TargetType,
          SQLPOINTER     TargetValuePtr,
          SQLLEN         BufferLength,
          SQLLEN *       StrLen_or_Ind);