다음을 통해 공유


동작 변경 및 ODBC 3.x 드라이버

환경 특성 SQL_ATTR_ODBC_VERSION ODBC 2.x 동작 또는 ODBC 3.x 동작을 표시해야 하는지 여부를 드라이버에 나타냅니다. SQL_ATTR_ODBC_VERSION 환경 특성이 설정되는 방법은 애플리케이션에 따라 달라집니다. ODBC 3.x 애플리케이션은 SQLAllocHandle을 호출하여 환경 핸들을 할당하고 SQLAllocHandle을 호출하여 연결 핸들을 할당하기 전에 SQLSetEnvAttr을 호출하여 이 특성을 설정해야 합니다. 이 작업을 수행하지 못하면 드라이버 관리자는 SQLAllocHandle에 대한 후자의 호출에서 SQLSTATE HY010(함수 시퀀스 오류)을 반환합니다.

참고 항목

동작 변경 내용 및 애플리케이션의 작동 방식에 대한 자세한 내용은 동작 변경을 참조 하세요.

ODBC 3.x 헤더 파일로 다시 컴파일된 ODBC 2.x 애플리케이션 및 ODBC 2.x 애플리케이션은 SQLSetEnvAttr을 호출하지 않습니다. 그러나 SQLAllocHandle 대신 SQLAllocEnv를 호출하여 환경 핸들을 할당합니다. 따라서 애플리케이션이 드라이버 관리자에서 SQLAllocEnv를 호출할 때 드라이버 관리자는 드라이버에서 SQLAllocHandleSQLSetEnvAttr을 호출 합니다. 따라서 ODBC 3.x 드라이버는 항상 설정되는 이 특성을 계산할 수 있습니다.

ODBC_STD 컴파일 플래그로 컴파일된 표준 규격 애플리케이션이 SQLAllocEnv를 호출하는 경우(SQLAllocEnv가 ISO에서 더 이상 사용되지 않기 때문에 발생할 수 있음) 호출은 컴파일 시간에 SQLAllocHandleStd에 매핑됩니다. 런타임에 애플리케이션은 SQLAllocHandleStd를 호출합니다. 드라이버 관리자는 SQL_ATTR_ODBC_VERSION 환경 특성을 SQL_OV_ODBC3 설정합니다. SQLAllocHandleStd에 대한 호출은 SQL_HANDLE_ENV HandleType사용하여 SQLAllocHandle을 호출하고 SQL_OV_ODBC3 SQL_ATTR_ODBC_VERSION 설정하는 SQLSetEnvAttr 호출 같습니다.

특정 드라이버 아키텍처에서는 연결에 따라 드라이버가 ODBC 2.x 드라이버 또는 ODBC 3.x 드라이버로 표시되어야 합니다. 이 경우 드라이버는 실제로 드라이버가 아니라 드라이버 관리자와 다른 드라이버 사이에 있는 계층일 수 있습니다. 예를 들어 ODBC Spy와 같은 드라이버를 모방할 수 있습니다. 또 다른 예제에서는 EDA/SQL과 같은 게이트웨이 역할을 할 수 있습니다. ODBC 3.x 드라이버로 표시하려면 이러한 드라이버가 SQLAllocHandle을 내보내고 ODBC 2.x 드라이버로 표시하려면 SQLAllocConnect, SQLAllocEnvSQLAllocStmt를 내보낼 수 있어야 합니다. 환경, 연결 또는 문이 할당될 때 드라이버 관리자는 이 드라이버가 SQLAllocHandle을 내보내는지 확인합니다. 드라이버가 수행되므로 드라이버 관리자는 드라이버에서 SQLAllocHandle을 호출합니다. 드라이버가 ODBC 2.x 드라이버로 작업하는 경우 드라이버는 SQLAllocHandle 호출을 SQLAllocConnect, SQLAllocEnv 또는 SQLAllocStmt에 적절하게 매핑해야 합니다. 또한 ODBC 2.x 드라이버로 동작할 때 SQLSetEnvAttr 호출에서는 아무 작업도 수행하지 않아야 합니다.

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