应用程序通过一个参数(名为 BufferLength 或类似名称)将数据缓冲区的字节长度传递给驱动程序。 例如,在对 SQLBindCol 的以下调用中,应用程序指定 ValuePtr 缓冲区(sizeof(ValuePtr)的长度:
SQLCHAR ValuePtr[50];
SQLINTEGER ValueLenOrInd;
SQLBindCol(hstmt, 1, SQL_C_CHAR, ValuePtr, sizeof(ValuePtr), &ValueLenOrInd);
驱动程序将始终返回任何具有输出字符串参数的函数的缓冲区长度参数中的字节数,而不是字符数。
仅输出缓冲区需要指定数据缓冲区长度; 驱动程序利用这些长度来避免超出缓冲区末尾进行写入。 但是,驱动程序仅在缓冲区包含可变长度数据(如字符或二进制数据)时才检查数据缓冲区长度。 如果缓冲区包含固定长度的数据(例如整数或日期结构),则驱动程序会忽略数据缓冲区长度,并假定缓冲区足够大来保存数据;也就是说,它永远不会截断固定长度的数据。 因此,应用程序必须为固定长度的数据分配足够大的缓冲区。
当发生非数据输出字符串的截断(例如 为 SQLGetCursorName 返回的游标名称)时,缓冲区长度参数中的返回长度是可能的最大字符长度。
输入缓冲区不需要数据缓冲区长度,因为驱动程序不会写入这些缓冲区。
本节包含以下主题。