데이터 버퍼 길이

애플리케이션은 BufferLength 또는 유사한 이름의 인수에서 드라이버에 데이터 버퍼의 바이트 길이를 전달합니다. 예를 들어 SQLBindCol에 대한 다음 호출에서 애플리케이션은 ValuePtr 버퍼(sizeof(ValuePtr)의 길이를 지정합니다.

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

드라이버는 항상 출력 문자열 인수가 있는 함수의 버퍼 길이 인수에서 문자 수가 아닌 바이트 수를 반환합니다.

데이터 버퍼 길이는 출력 버퍼에만 필요합니다. 드라이버는 버퍼의 끝을 지나 쓰기를 방지하기 위해 사용합니다. 그러나 드라이버는 버퍼에 문자 또는 이진 데이터와 같은 가변 길이 데이터가 포함된 경우에만 데이터 버퍼 길이를 검사. 버퍼에 정수 또는 날짜 구조와 같은 고정 길이 데이터가 포함된 경우 드라이버는 데이터 버퍼 길이를 무시하고 버퍼가 데이터를 저장할 만큼 충분히 크다고 가정합니다. 즉, 고정 길이 데이터를 자르지 않습니다. 따라서 애플리케이션이 고정 길이 데이터에 충분한 버퍼를 할당하는 것이 중요합니다.

데이터 출력 문자열이 아닌 문자열이 잘리는 경우(예: SQLGetCursorName에 대해 반환된 커서 이름) 버퍼 길이 인수에서 반환되는 길이는 가능한 최대 문자 길이입니다.

드라이버가 이러한 버퍼에 쓰지 않으므로 입력 버퍼에는 데이터 버퍼 길이가 필요하지 않습니다.

이 섹션에서는 다음 항목을 다룹니다.