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

问题描述:

SQLBindCol函数需要一个缓冲区长度(对于一定的缓冲类型,如字符串):如何确定正确的缓冲区大小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); 

我怎么知道我有多么的字节应该分配?

我能想到的唯一办法是使用SQLGetDescField得到SQL_DESC_LENGTH,但是我必须执行两次查询。

事实证明我混淆,其中功能运行的顺序,以正确的顺序是:

  1. SQLBindParameter
  2. SQLExecDirect
  3. SQLBindCol

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

SQLExecDirect后可以使用SQLNumResultColsSQLGetDescField函数来确定的列数,它们的数据类型,长度等

的SQL92/CLI(呼叫级接口)文档在附录B.2 Interactive Query一个例子使用SQLDescribeCol来获得长度。

绑定前调用SQLDescribeCol。