다음을 통해 공유


드라이버 관리자

드라이버 관리자는 애플리케이션과 드라이버 간의 통신을 관리하는 라이브러리입니다. 예를 들어 Microsoft Windows 플랫폼에서 드라이버 관리자는 Microsoft에서 작성한 DLL(동적 연결 라이브러리)이며 재배포 가능 MDAC 2.8 SP1 SDK 사용자가 재배포할 수 있습니다.

드라이버 관리자는 기본 애플리케이션 작성기의 편의를 위해 존재하며 모든 애플리케이션에 공통적인 여러 가지 문제를 해결합니다. 여기에는 데이터 원본 이름에 따라 로드할 드라이버 결정, 드라이버 로드 및 언로드, 드라이버에서 함수 호출이 포함됩니다.

후자가 문제가 되는 이유를 확인하려면 애플리케이션이 드라이버에서 함수를 직접 호출하는 경우 어떤 일이 발생하는지 고려합니다. 애플리케이션이 특정 드라이버에 직접 연결되지 않은 경우 해당 드라이버의 함수에 대한 포인터 테이블을 빌드하고 포인터로 해당 함수를 호출해야 합니다. 한 번에 둘 이상의 드라이버에 동일한 코드를 사용하면 또 다른 수준의 복잡성이 추가됩니다. 애플리케이션은 먼저 올바른 드라이버에서 올바른 함수를 가리키도록 함수 포인터를 설정한 다음 해당 포인터를 통해 함수를 호출해야 합니다.

드라이버 관리자는 각 함수를 호출할 수 있는 단일 위치를 제공하여 이 문제를 해결합니다. 애플리케이션은 드라이버 관리자에 연결되고 드라이버가 아닌 드라이버 관리자에서 ODBC 함수를 호출합니다. 애플리케이션은 연결 핸들을 사용하여 대상 드라이버 및 데이터 원본을 식별합니다. 드라이버를 로드할 때 드라이버 관리자는 해당 드라이버의 함수에 대한 포인터 테이블을 작성합니다. 애플리케이션에서 전달한 연결 핸들을 사용하여 대상 드라이버에서 함수의 주소를 찾고 해당 함수를 주소별로 호출합니다.

대부분의 경우 드라이버 관리자는 애플리케이션의 함수 호출을 올바른 드라이버로 전달합니다. 그러나 일부 함수(SQLDataSources, SQLDrivers 및 SQLGetFunctions)도 구현하고 기본 오류 검사 수행합니다. 예를 들어 드라이버 관리자 검사 핸들은 null 포인터가 아니며, 함수가 올바른 순서로 호출되고, 특정 함수 인수가 유효합니다. 드라이버 관리자에서 검사 오류에 대한 전체 설명은 각 함수 및 부록 B: ODBC 상태 전환 테이블에 대한 참조 섹션을 참조하세요.

드라이버 관리자의 마지막 주요 역할은 드라이버를 로드하고 언로드하는 것입니다. 애플리케이션은 드라이버 관리자만 로드하고 언로드합니다. 특정 드라이버를 사용하려는 경우 드라이버 관리자에서 연결 함수(SQL커넥트, SQLDriver커넥트 또는 SQLBrowse커넥트)를 호출하고 특정 데이터 원본 또는 드라이버의 이름(예: "Accounting" 또는 "SQL Server")을 지정합니다. 이 이름을 사용하여 드라이버 관리자는 Sqlsrvr.dll 같은 드라이버의 파일 이름에 대한 데이터 원본 정보를 검색합니다. 그런 다음 드라이버를 로드하고(아직 로드되지 않은 것으로 가정) 드라이버에 각 함수의 주소를 저장하고 드라이버에서 연결 함수를 호출한 다음, 자신을 초기화하고 데이터 원본에 연결합니다.

애플리케이션이 드라이버를 사용하여 완료되면 드라이버 관리자에서 SQLDisconnect를 호출합니다. 드라이버 관리자는 드라이버에서 이 함수를 호출하여 데이터 원본과 연결을 끊습니다. 그러나 드라이버 관리자는 애플리케이션이 다시 연결할 경우에 대비하여 드라이버를 메모리에 유지합니다. 애플리케이션이 드라이버에서 사용하는 연결을 해제하거나 다른 드라이버에 대한 연결을 사용하고 다른 연결에서 드라이버를 사용하지 않는 경우에만 드라이버를 언로드합니다. 드라이버 로드 및 언로드에서 드라이버 관리자의 역할에 대한 자세한 설명은 커넥트ion 프로세스에서 드라이버 관리자의 역할을 참조하세요.