ODBC 3.x 애플리케이션의 블록 커서, 스크롤 가능 커서 및 이전 버전과의 호환성
SQLFetchScroll과 SQLExtendedFetch는 애플리케이션이 호출하는 함수 집합인 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 | SQLFetch 및 SQLFetchScroll이 가져온 행 수를 반환하는 버퍼를 가리킵니다. 애플리케이션이 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를 사용해야 합니다.