다음을 통해 공유


ODBC 3.x 애플리케이션의 블록 커서, 스크롤 가능 커서 및 이전 버전과의 호환성

SQLFetchScrollSQLExtendedFetch는 애플리케이션이 호출하는 함수 집합인 API(애플리케이션 프로그래밍 인터페이스)와 드라이버가 구현하는 함수 집합인 SPI(서비스 공급자 인터페이스) 간의 ODBC에서 첫 번째 명확한 분할을 나타냅니다. 이 분할은 SQLFetchScroll을 사용하는 ODBC 3.x의 요구 사항의 균형을 맞추고 표준에 부합하고 SQLExtendedFetch를 사용하는 ODBC 2.x와 호환되는 데 필요합니다.

애플리케이션이 호출하는 함수 집합인 ODBC 3.x API에는 SQLFetchScroll 및 관련 문 특성이 포함됩니다. 드라이버가 구현하는 함수 집합인 ODBC 3.x SPI에는 SQLFetchScroll, SQLExtendedFetch 및 관련 문 특성이 포함됩니다. ODBC는 API와 SPI 간에 이 분할을 공식적으로 적용하지 않으므로 ODBC 3.x 애플리케이션에서 SQLExtendedFetch 및 관련 문 특성을 호출할 수 있습니다. 그러나 ODBC 3.x 애플리케이션에서 이 작업을 수행할 이유가 없습니다. API 및 SPIs에 대한 자세한 내용은 ODBC 아키텍처 소개를 참조하세요.

ODBC 3.x 드라이버 관리자가 ODBC 2.x 및 ODBC 3.x 드라이버에 호출을 매핑하는 방법과 블록 및 스크롤 가능한 커서에 대해 ODBC 3.x 드라이버가 구현해야 하는 함수 및 문 특성에 대한 자세한 내용은 부록 G: 이전 버전과의 호환성을 위한 드라이버 지침을 참조하세요.

다음 표에는 ODBC 3.x 애플리케이션이 블록 및 스크롤 가능한 커서에 사용해야 하는 함수 및 문 특성이 요약되어 있습니다. 또한 ODBC 3.x 애플리케이션이 ODBC 2.x 드라이버와 호환되도록 알고 있어야 하는 이 영역의 ODBC 2.x와 ODBC 3.x 간의 변경 내용도 나열합니다.

함수 또는

statement 특성
설명
SQL_ATTR_FETCH_BOOKMARK_PTR SQLFetchScroll사용할 책갈피를 가리킵니다.

애플리케이션이 ODBC 2.x 드라이버에서 이를 설정하는 경우 고정 길이 책갈피를 가리킵니다.
SQL_ATTR_ROW_STATUS_PTR SQLFetch, SQLFetchScroll, SQLBulkOperations 및 SQLSetPos채워진 행 상태 배열을 가리킵니다.

애플리케이션이 ODBC 2.x 드라이버에서 이를 설정하고 SQLFetchScroll, SQLFetch 또는 SQLExtendedFetch를 호출하기 전에 SQL_ADD 작업으로 SQLBulkOperation을 호출하면 SQLSTATE HY011(지금은 특성을 설정할 수 없음)이 반환됩니다.

애플리케이션이 ODBC 2.x 드라이버에서 SQLFetch를 호출하는 경우 SQLFetch는 SQLExtendedFetch매핑되므로 이 배열의 값을 반환합니다.
SQL_ATTR_ROWS_FETCHED_PTR SQLFetchSQLFetchScroll가져온 행 수를 반환하는 버퍼를 가리킵니다.

애플리케이션이 ODBC 2.x 드라이버에서 SQLFetch를 호출하는 경우 SQLFetch는 SQLExtendedFetch매핑되므로 이 버퍼의 값을 반환합니다.
SQL_ATTR_ROW_ARRAY_SIZE 행 집합 크기를 설정합니다.

애플리케이션이 ODBC 2.x 드라이버에서 SQL_ADD 연산사용하여 SQLBulkOperations를 호출하는 경우 호출이 SQL_ROWSET_SIZE 사용하는 SQL_ADD 작업으로 SQLSetPos에 매핑되기 때문에 SQL_ROWSET_SIZE SQL_ATTR_ROW_ARRAY_SIZE 아닌 호출에 사용됩니다.

ODBC 2.x 드라이버에서 SQL_ADD 또는 SQLExtendedFetch 작업으로 SQLSetPos를 호출하는 경우 SQL_ROWSET_SIZE 사용합니다.

ODBC 2.x 드라이버에서 SQLFetch 또는 SQLFetchScroll을 호출하는 경우 SQL_ATTR_ROW_ARRAY_SIZE 사용합니다.
SQLBulkOperations 삽입 및 책갈피 작업을 수행합니다. SQL_ADD 연산이 있는 SQLBulkOperations가 ODBC 2.x 드라이버에서 호출되면 SQL_ADD 연산을 사용하여 SQLSetPos매핑됩니다. 구현 세부 정보는 다음과 같습니다.

- ODBC 2.x 드라이버로 작업할 때 애플리케이션은 StatementHandle연결된 암시적으로 할당된 ARD만 사용해야 합니다. 명시적 설명자 작업은 ODBC 2.x 드라이버에서 지원되지 않으므로 행을 추가하기 위해 다른 ARD를 할당할 수 없습니다. 애플리케이션은 SQLBindCol을 사용하여 SQLSetDescField 또는 SQLSetDescRec가 아닌 ARD에 바인딩해야 합니다.
- ODBC 3.x 드라이버를 호출할 때 애플리케이션은 SQLFetch 또는 SQLFetchScroll을 호출하기 전에 SQL_ADD 작업으로 SQLBulkOperations를 호출할 수 있습니다. ODBC 2.x 드라이버를 호출할 때 애플리케이션은 SQL_ADD 작업으로 SQLBulkOperations를 호출하기 전에 SQLFetchScroll을 호출해야 합니다.
SQLFetch 다음 행 집합을 반환합니다. 구현 세부 정보는 다음과 같습니다.

- 애플리케이션이 ODBC 2.x 드라이버에서 SQLFetch를 호출하면 SQLExtendedFetch매핑됩니다.
- 애플리케이션이 ODBC 3.x 드라이버에서 SQLFetch를 호출하면 SQL_ATTR_ROW_ARRAY_SIZE 문 특성으로 지정된 행 수를 반환합니다.
SQLFetchScroll 지정된 행 집합을 반환합니다. 구현 세부 정보는 다음과 같습니다.

- 애플리케이션이 ODBC 2.x 드라이버에서 SQLFetchScroll을 호출하는 경우 단일 행에 적용되는 각 오류 앞에 SQLSTATE 01S01(행 오류)을 반환합니다. ODBC 3.x 드라이버 관리자가 이를 SQLExtendedFetch에 매핑하고 SQLExtendedFetch가 이 SQLSTATE를 반환하기 때문에 이 작업을 수행합니다. 애플리케이션이 ODBC 3.x 드라이버에서 SQLFetchScroll을 호출하는 경우 SQLSTATE 01S01(행의 오류)을 반환하지 않습니다.
- 애플리케이션이 FetchOrientation이 SQL_FETCH_BOOKMARK 설정된 ODBC 2.x 드라이버에서 SQLFetchScroll을 호출하는 경우 FetchOffset 인수를 0으로 설정해야 합니다. ODBC 2.x 드라이버로 오프셋 기반 책갈피 가져오기를 시도하면 SQLSTATE HYC00(선택적 기능이 구현되지 않음)이 반환됩니다.

참고 항목

ODBC 3.x 애플리케이션은 SQLExtendedFetch 또는 SQL_ROWSET_SIZE 문 특성을 사용하면 안 됩니다. 대신 SQLFetchScroll 및 SQL_ATTR_ROW_ARRAY_SIZE 문 특성을 사용해야 합니다. ODBC 3.x 애플리케이션은 SQL_ADD 작업에서 SQLSetPos를 사용하지 않아야 하지만 SQL_ADD 작업과 함께 SQLBulkOperations사용해야 합니다.