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
,但我必须执行两次查询。
答案 0 :(得分:2)
事实证明我混淆了运行函数的顺序,正确的顺序是:
SQLBindParameter
SQLExecDirect
SQLBindCol
对于SQLBindParameter
(至少对于输入参数),在执行语句之前已知长度。
在SQLExecDirect
之后,您可以使用SQLNumResultCols
和SQLGetDescField
函数来确定列数,数据类型,长度等。
SQL92 / CLI(调用级别接口)文档在附录B.2 Interactive Query
中有一个示例,它使用SQLDescribeCol
来获取长度。
答案 1 :(得分:0)
在绑定之前调用SQLDescribeCol。