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

时间:2014-01-18 13:42:49

标签: c odbc buffer unixodbc

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

http://msdn.microsoft.com/en-us/library/ms710118(v=vs.85).aspx

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

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

我唯一能想到的就是使用SQL_DESC_LENGTH获取SQLGetDescField,但我必须执行两次查询。

2 个答案:

答案 0 :(得分:2)

事实证明我混淆了运行函数的顺序,正确的顺序是:

  1. SQLBindParameter
  2. SQLExecDirect
  3. SQLBindCol
  4. 对于SQLBindParameter(至少对于输入参数),在执行语句之前已知长度。

    SQLExecDirect之后,您可以使用SQLNumResultColsSQLGetDescField函数来确定列数,数据类型,长度等。

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

答案 1 :(得分:0)

在绑定之前调用SQLDescribeCol。