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(调用级接口(interface))文档在附录 B.2 交互式查询
中有一个使用 SQLDescribeCol
获取长度的示例。
关于c - 如何确定 SQLBindCol 的正确缓冲区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21204938/