数据缓冲区长度

应用程序会将数据缓冲区的字节长度传递到参数中的驱动程序,其名为 BufferLength 或类似名称。 例如,在对 SQLBindCol 的以下调用中,应用程序会指定 ValuePtr 缓冲区的长度 (sizeof(ValuePtr)):

SQLCHAR      ValuePtr[50];  
SQLINTEGER   ValueLenOrInd;  
SQLBindCol(hstmt, 1, SQL_C_CHAR, ValuePtr, sizeof(ValuePtr), &ValueLenOrInd);  

在具有输出字符串参数的任何函数的缓冲区长度参数中,驱动程序将始终返回字节数,而非字符数。

仅输出缓冲区需要数据缓冲区长度;驱动程序使用它们来避免写入超过缓冲区末尾。 但是,驱动程序仅在缓冲区包含可变长度的数据(如字符或二进制数据)时才检查数据缓冲区长度。 如果缓冲区包含固定长度的数据(例如整数或日期结构),则驱动程序会忽略数据缓冲区长度,并假定缓冲区足够大可保存数据;也就是说,它永远不会截断固定长度的数据。 因此,应用程序为固定长度的数据分配足够大的缓冲区很重要。

当发生非数据输出字符串的截断(例如为 SQLGetCursorName 返回的游标名称)时,缓冲区长度参数中的返回长度是可能的最大字符长度。

输入缓冲区不需要数据缓冲区长度,因为驱动程序不会写入到这些缓冲区。

本部分包含以下主题。