如何确定正确的缓冲区大小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
,但是我必须执行两次查询。
答
事实证明我混淆,其中功能运行的顺序,以正确的顺序是:
SQLBindParameter
SQLExecDirect
SQLBindCol
对于SQLBindParameter
(至少对于输入参数),在语句执行之前,这些长度是已知的。
SQLExecDirect
后可以使用SQLNumResultCols
和SQLGetDescField
函数来确定的列数,它们的数据类型,长度等
的SQL92/CLI(呼叫级接口)文档在附录B.2 Interactive Query
一个例子使用SQLDescribeCol
来获得长度。
答
绑定前调用SQLDescribeCol。