Share via


데이터 행 가져오기

데이터 행을 가져오기 위해 애플리케이션은 SQLFetch를 호출합니다. SQLFetch 는 모든 종류의 커서를 사용하여 호출할 수 있지만 행 집합 커서만 정방향으로 이동합니다. SQLFetch는 커서를 다음 행으로 이동하고 SQLBindCol에 대한 호출로 바인딩된 모든 열에 대한 데이터를 반환합니다. 커서가 결과 집합의 끝에 도달하면 SQLFetchSQL_NO_DATA 반환합니다. SQLFetch를 호출하는 예제는 SQLBindCol 사용을 참조하세요.

SQLFetch가 구현되는 정확한 방법은 드라이버별이지만 드라이버가 데이터 원본에서 바인딩된 열에 대한 데이터를 검색하고 바인딩된 변수의 형식에 따라 변환한 다음 변환된 데이터를 해당 변수에 배치하는 것이 일반적인 패턴입니다. 드라이버가 데이터를 변환할 수 없는 경우 SQLFetch 는 오류를 반환합니다. 애플리케이션은 행을 계속 가져올 수 있지만 현재 행의 데이터는 손실됩니다. 언바운드 열에 대한 데이터는 드라이버에 따라 달라지지만 대부분의 드라이버는 데이터를 검색 및 해제하거나 전혀 검색하지 카드.

또한 드라이버는 바인딩된 모든 길이/표시기 버퍼의 값을 설정합니다. 열의 데이터 값이 NULL이면 드라이버는 해당 길이/표시기 버퍼를 SQL_NULL_DATA 설정합니다. 데이터 값이 NULL이 아닌 경우 드라이버는 변환 후 길이/표시기 버퍼를 데이터의 바이트 길이로 설정합니다. 두 개 이상의 함수 호출에 의해 검색되는 긴 데이터가 있는 경우와 마찬가지로 이 길이를 확인할 수 없는 경우 드라이버는 길이/표시기 버퍼를 SQL_NO_TOTAL 설정합니다. 정수 및 날짜 구조와 같은 고정 길이 데이터 형식의 경우 바이트 길이는 데이터 형식의 크기입니다.

문자 및 이진 데이터와 같은 가변 길이 데이터의 경우 드라이버는 변환된 데이터의 바이트 길이를 열에 바인딩된 버퍼의 바이트 길이와 검사. 버퍼의 길이는 SQLBindCol의 BufferLength 인수에 지정됩니다. 변환된 데이터의 바이트 길이가 버퍼의 바이트 길이보다 크면 드라이버는 버퍼에 맞게 데이터를 잘라내고, 길이/표시기 버퍼에서 신뢰할 수 없는 길이를 반환하고, SQL_SUCCESS_WITH_INFO 반환하고, SQLSTATE 01004(데이터가 잘린)를 진단 배치합니다. 유일한 예외는 SQLSTATE 22001(문자열 데이터, 오른쪽 잘림)을 반환하는 SQLFetch에서 반환할 때 가변 길이 책갈피가 잘리는 경우입니다.

드라이버가 바인딩된 버퍼의 크기가 데이터 형식의 크기라고 가정하기 때문에 고정 길이 데이터는 잘리지 않습니다. 애플리케이션은 일반적으로 전체 데이터 값을 보유할 수 있을 만큼 큰 버퍼를 바인딩하므로 데이터 잘림은 드문 경향이 있습니다. 메타데이터에서 필요한 크기를 결정합니다. 그러나 애플리케이션은 너무 작은 것으로 알고 있는 버퍼를 명시적으로 바인딩할 수 있습니다. 예를 들어 파트 설명의 처음 20자 또는 긴 텍스트 열의 처음 100자를 검색하고 표시할 수 있습니다.

문자 데이터는 잘린 경우에도 애플리케이션에 반환되기 전에 드라이버에 의해 null로 종료되어야 합니다. null 종료 문자는 반환된 바이트 길이에 포함되지 않지만 바인딩된 버퍼에 공백이 필요합니다. 예를 들어 애플리케이션이 ASCII 문자 집합의 문자 데이터로 구성된 문자열을 사용하고, 드라이버에 반환할 데이터가 50자이고, 애플리케이션의 버퍼 길이가 25바이트라고 가정합니다. 애플리케이션의 버퍼에서 드라이버는 처음 24자 뒤에 null 종료 문자를 반환합니다. 길이/표시기 버퍼에서 바이트 길이 50을 반환합니다.

애플리케이션은 결과 집합을 만드는 문을 실행하기 전에 SQL_ATTR_MAX_ROWS 문 특성을 설정하여 결과 집합의 행 수를 제한할 수 있습니다. 예를 들어 보고서의 서식을 지정하는 데 사용되는 애플리케이션의 미리 보기 모드에는 보고서의 첫 번째 페이지를 표시하기에 충분한 데이터만 필요합니다. 결과 집합의 크기를 제한하면 이러한 기능이 더 빠르게 실행됩니다. 이 문 특성은 네트워크 트래픽을 줄이기 위한 것이며 모든 드라이버에서 지원되지 않을 수 있습니다.