다음을 통해 공유


SQLConnect 함수

규칙
버전 소개: ODBC 1.0 표준 준수: ISO 92

요약
SQLConnect 는 드라이버 및 데이터 원본에 대한 연결을 설정합니다. 연결 핸들은 상태, 트랜잭션 상태 및 오류 정보를 포함하여 데이터 원본에 대한 연결에 대한 모든 정보의 스토리지를 참조합니다.

구문

  
SQLRETURN SQLConnect(  
     SQLHDBC        ConnectionHandle,  
     SQLCHAR *      ServerName,  
     SQLSMALLINT    NameLength1,  
     SQLCHAR *      UserName,  
     SQLSMALLINT    NameLength2,  
     SQLCHAR *      Authentication,  
     SQLSMALLINT    NameLength3);  

인수

ConnectionHandle
[Input] 연결 핸들입니다.

데이터 열이 추적에서 캡처되고 서버를 사용할 수 있으면
[입력] 데이터 원본 이름입니다. 데이터는 프로그램과 동일한 컴퓨터 또는 네트워크의 다른 컴퓨터에 있을 수 있습니다. 애플리케이션에서 데이터 원본을 선택하는 방법에 대한 자세한 내용은 데이터 원본 또는 드라이버 선택을 참조하세요.

NameLength1
[입력] *ServerName 문자의 길이입니다.

UserName
[입력] 사용자 식별자입니다.

NameLength2
[입력] *UserName 문자의 길이입니다.

인증
[입력] 인증 문자열(일반적으로 암호).

NameLength3
[입력] *문자의 인증 길이입니다.

반품

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE 또는 SQL_STILL_EXECUTING.

진단

SQLConnect가 SQL_ERROR 또는 SQL_SUCCESS_WITH_INFO 반환하는 경우 SQL_HANDLE_DBC HandleType ConnectionHandle 핸들을 사용하여 SQLGetDiagRec를 호출하여 연결된 SQLSTATE 값을 가져올 수 있습니다. 다음 표에서는 일반적으로 SQLConnect에서 반환되는 SQLSTATE 값을 나열하고 이 함수의 컨텍스트에서 각 값을 설명합니다. 표기법 "(DM)"은 드라이버 관리자가 반환한 SQLSTATE에 대한 설명 앞에 나와 있습니다. 달리 명시되지 않는 한 각 SQLSTATE 값과 연결된 반환 코드는 SQL_ERROR.

SQLSTATE Error 설명
01000 일반 경고 드라이버 관련 정보 메시지입니다. 함수는 SQL_SUCCESS_WITH_INFO 반환합니다.
01S02 옵션 값이 변경됨 드라이버는 SQLSetConnectAttr에서 ValuePtr 인수의 지정된 값을 지원하지 않고 비슷한 값을 대체했습니다. 함수는 SQL_SUCCESS_WITH_INFO 반환합니다.
08001 클라이언트가 연결을 설정할 수 없음 드라이버가 데이터 원본과의 연결을 설정할 수 없습니다.
08002 사용 중인 연결 이름 (DM) 지정된 ConnectionHandle 이 이미 데이터 원본과의 연결을 설정하는 데 사용되었으며 연결이 열려 있거나 사용자가 연결을 검색하고 있었습니다.
08004 서버에서 연결을 거부했습니다. 데이터 원본에서 구현 정의 이유로 연결 설정이 거부되었습니다.
08S01 통신 링크 실패 드라이버와 연결하려는 데이터 원본 간의 통신 링크가 함수 처리를 완료하기 전에 실패했습니다.
28000 잘못된 권한 부여 사양 UserName 인수에 대해 지정된 값 또는 인증 인수에 지정된 값이 데이터 원본에서 정의한 제한을 위반했습니다.
HY000 일반 오류 특정 SQLSTATE가 없고 구현별 SQLSTATE가 정의되지 않은 오류가 발생했습니다. *MessageText 버퍼의 SQLGetDiagRec에서 반환된 오류 메시지는 오류와 그 원인을 설명합니다.
HY001 메모리 할당 오류 (DM) 드라이버 관리자가 함수 실행 또는 완료를 지원하는 데 필요한 메모리를 할당할 수 없습니다.
HY008 작업이 취소됨 ConnectionHandle에 대해 비동기 처리를 사용하도록 설정했습니다. SQLConnect 함수가 호출되었고 실행이 완료되기 전에 ConnectionHandle에서 SQLCancelHandle 함수가 호출된 다음 ConnectionHandle에서 SQLConnect 함수가 다시 호출되었습니다.

또는 SQLConnect 함수가 호출되었고 실행을 완료하기 전에 다중 스레드 애플리케이션의 다른 스레드에서 ConnectionHandle에서 SQLCancelHandle이 호출되었습니다.
HY010 함수 시퀀스 오류 (DM) ConnectionHandle에 대해 비동기 실행 함수(이 함수가 아님)가 호출되었고 이 함수가 호출되었을 때 계속 실행되고 있었습니다.
HY013 메모리 관리 오류 메모리 조건이 낮기 때문에 기본 메모리 개체에 액세스할 수 없기 때문에 함수 호출을 처리할 수 없습니다.
HY090 잘못된 문자열 또는 버퍼 길이 (DM) NameLength1, NameLength2 또는 NameLength3 인수에 지정된 값이 0보다 작지만 SQL_NTS 같지 않습니다.

(DM) NameLength1 인수에 지정된 값이 데이터 원본 이름의 최대 길이를 초과했습니다.
HYT00 시간 제한 만료됨 데이터 원본에 대한 연결이 완료되기 전에 쿼리 제한 시간이 만료되었습니다. 시간 제한 기간은 SQL_ATTR_LOGIN_TIMEOUT SQLSetConnectAttr를 통해 설정됩니다.
HY114 드라이버는 연결 수준 비동기 함수 실행을 지원하지 않습니다. (DM) 애플리케이션은 연결을 만들기 전에 연결 핸들에서 비동기 작업을 사용하도록 설정했습니다. 그러나 드라이버는 연결 핸들에 대한 비동기 작업을 지원하지 않습니다.
HYT01 연결 제한 시간이 만료됨 데이터 원본이 요청에 응답하기 전에 연결 제한 시간이 만료되었습니다. 연결 제한 시간은 SQL_ATTR_CONNECTION_TIMEOUT SQLSetConnectAttr를 통해 설정됩니다.
IM001 드라이버는 이 함수를 지원하지 않습니다. (DM) 데이터 원본 이름으로 지정된 드라이버가 함수를 지원하지 않습니다.
IM002 데이터 원본을 찾을 수 없고 기본 드라이버가 지정되지 않음 (DM) ServerName 인수에 지정된 데이터 원본 이름이 시스템 정보에서 찾을 수 없으며 기본 드라이버 사양도 없습니다.
IM003 지정된 드라이버를 연결할 수 없습니다. (DM) 시스템 정보의 데이터 원본 사양에 나열된 드라이버를 찾을 수 없거나 다른 이유로 연결할 수 없습니다.
IM004 SQL_HANDLE_ENV 드라이버의 SQLAllocHandle이 실패했습니다. (DM) SQLConnect 중에 드라이버 관리자는 handleType이 SQL_HANDLE_ENV 드라이버의 SQLAllocHandle 함수를 호출했고 드라이버는 오류를 반환했습니다.
IM005 SQL_HANDLE_DBC 드라이버의 SQLAllocHandle이 실패했습니다. (DM) SQLConnect 중에 드라이버 관리자는 handleType이 SQL_HANDLE_DBC 드라이버의 SQLAllocHandle 함수를 호출했고 드라이버는 오류를 반환했습니다.
IM006 드라이버의 SQLSetConnectAttr 실패 SQLConnect 중에 드라이버 관리자는 드라이버의 SQLSetConnectAttr 함수를 호출했고 드라이버는 오류를 반환했습니다. 함수는 SQL_SUCCESS_WITH_INFO 반환합니다.
IM009 번역 DLL에 연결할 수 없음 드라이버가 데이터 원본에 대해 지정된 변환 DLL에 연결할 수 없습니다.
IM010 데이터 원본 이름이 너무 깁니다. (DM) *ServerName 이 SQL_MAX_DSN_LENGTH 문자보다 깁니다.
IM014 지정된 DSN에는 드라이버와 애플리케이션 간의 아키텍처 불일치가 포함되어 있습니다. (DM) 32비트 애플리케이션은 64비트 드라이버에 연결하는 DSN을 사용합니다. 또는 그 반대의 경우도 마찬가지입니다.
IM015 SQL_HANDLE_DBC_INFO_HANDLE 드라이버의 SQLConnect 실패 드라이버가 SQL_ERROR 반환하면 드라이버 관리자가 애플리케이션에 SQL_ERROR 반환하고 연결이 실패합니다.

SQL_HANDLE_DBC_INFO_TOKEN 대한 자세한 내용은 ODBC 드라이버에서 연결 풀 인식 개발을 참조 하세요.
IM017 비동기 알림 모드에서 폴링을 사용할 수 없습니다. 알림 모델을 사용할 때마다 폴링이 비활성화됩니다.
IM018 이 핸들에서 이전 비동기 작업을 완료하기 위해 SQLCompleteAsync 가 호출되지 않았습니다. 핸들의 이전 함수 호출이 SQL_STILL_EXECUTING 반환하고 알림 모드가 활성화된 경우 사후 처리를 수행하고 작업을 완료하려면 핸들에서 SQLCompleteAsync 를 호출해야 합니다.
S1118 드라이버는 비동기 알림을 지원하지 않습니다. 드라이버가 비동기 알림을 지원하지 않는 경우 SQL_ATTR_ASYNC_DBC_EVENT 또는 SQL_ATTR_ASYNC_DBC_RETCODE_PTR 설정할 수 없습니다.

주석

애플리케이션에서 SQLConnect를 사용하는 이유에 대한 자세한 내용은 SQLConnect를 사용하여 연결을 참조하세요.

드라이버 관리자는 애플리케이션이 드라이버에 연결하기 위해 함수(SQLConnect, SQLDriverConnect 또는 SQLBrowseConnect)를 호출할 때까지 드라이버에 연결하지 않습니다. 이 시점까지 드라이버 관리자는 자체 핸들을 사용하여 작업하고 연결 정보를 관리합니다. 애플리케이션이 연결 함수를 호출할 때 드라이버 관리자는 지정된 ConnectionHandle에 대해 드라이버가 현재 연결되어 있는지 확인합니다.

  • 드라이버가 연결되지 않은 경우 드라이버 관리자는 드라이버에 연결하고 SQL_HANDLE_ENV HandleType, SQL_HANDLE_DBC HandleType을 사용하는 SQLAllocHandle, SQLSetConnectAttr(애플리케이션이 연결 특성을 지정한 경우) 및 드라이버의 연결 함수를 사용하여 SQLAllocHandle 을 호출합니다. 드라이버 관리자는 SQLSTATE IM006(드라이버의 SQLSetConnectOption 실패)을 반환하고 드라이버가 SQLSetConnectAttr에 대한 오류를 반환한 경우 연결 함수에 대한 SQL_SUCCESS_WITH_INFO. 자세한 내용은 데이터 원본 또는 드라이버에 연결을 참조 하세요.

  • 지정된 드라이버가 ConnectionHandle이미 연결되어 있는 경우 드라이버 관리자는 드라이버의 연결 함수만 호출합니다. 이 경우 드라이버는 ConnectionHandle에 대한 모든 연결 특성이 현재 설정을 유지 관리해야 합니다.

  • 다른 드라이버가 연결된 경우 드라이버 관리자는 SQL_HANDLE_DBC HandleType을 사용하여 SQLFreeHandle을 호출한 다음, 해당 환경에서 다른 드라이버가 연결되지 않은 경우 연결된 드라이버에서 SQL_HANDLE_ENV HandleType을 사용하여 SQLFreeHandle을 호출한 다음 해당 드라이버의 연결을 끊습니다. 그런 다음 드라이버가 연결되지 않은 경우와 동일한 작업을 수행합니다.

그런 다음 드라이버는 핸들을 할당하고 자체를 초기화합니다.

애플리케이션이 SQLDisconnect를 호출하면 드라이버 관리자는 드라이버에서 SQLDisconnect를 호출합니다. 그러나 드라이버의 연결이 끊어지지는 않습니다. 이렇게 하면 데이터 원본에 반복적으로 연결하고 데이터 원본에서 연결을 끊는 애플리케이션에 대한 드라이버가 메모리에 유지됩니다. 애플리케이션이 SQL_HANDLE_DBC HandleType을 사용하여 SQLFreeHandle을 호출하면 드라이버 관리자는 SQL_HANDLE_DBC HandleType을 사용하여 SQLFreeHandle을 호출한 다음, 드라이버에서 SQL_HANDLE_ENV HandleType을 사용하여 SQLFreeHandle을 호출한 다음 드라이버의 연결을 끊습니다.

ODBC 애플리케이션은 둘 이상의 연결을 설정할 수 있습니다.

드라이버 관리자 지침

*ServerName 의 내용은 드라이버 관리자와 드라이버가 함께 작동하여 데이터 원본에 대한 연결을 설정하는 방법에 영향을 줍니다.

  • *ServerName 에 유효한 데이터 원본 이름이 포함된 경우 드라이버 관리자는 시스템 정보에서 해당 데이터 원본 사양을 찾아 연결된 드라이버에 연결합니다. 드라이버 관리자는 각 SQLConnect 인수를 드라이버에 전달합니다.

  • 데이터 원본 이름을 찾을 수 없거나 ServerName 이 null 포인터인 경우 드라이버 관리자는 기본 데이터 원본 사양을 찾아 연결된 드라이버에 연결합니다. 드라이버 관리자는 사용자 이름 및 인증 인수를 수정되지 않은 상태로 드라이버에 전달하고 ServerName 인수에 대해 "DEFAULT"를 전달합니다.

  • ServerName 인수가 "DEFAULT"인 경우 드라이버 관리자는 기본 데이터 원본 사양을 찾아 연결된 드라이버에 연결합니다. 드라이버 관리자는 각 SQLConnect 인수를 드라이버에 전달합니다.

  • 데이터 원본 이름을 찾을 수 없거나 ServerName 이 null 포인터이고 기본 데이터 원본 사양이 없으면 드라이버 관리자는 SQLSTATE IM002를 사용하여 SQL_ERROR 반환합니다(데이터 원본 이름을 찾을 수 없고 기본 드라이버가 지정되지 않음).

드라이버 관리자가 연결한 후 드라이버는 시스템 정보에서 해당 데이터 원본 사양을 찾고 사양의 드라이버 관련 정보를 사용하여 필요한 연결 정보 집합을 완료할 수 있습니다.

데이터 원본에 대한 시스템 정보에 기본 번역 라이브러리가 지정되면 드라이버가 연결됩니다. SQL_ATTR_TRANSLATE_LIB 특성을 사용하여 SQLSetConnectAttr를 호출하여 다른 번역 라이브러리를 연결할 수 있습니다. SQL_ATTR_TRANSLATE_OPTION 특성을 사용하여 SQLSetConnectAttr를 호출하여 변환 옵션을 지정할 수 있습니다.

드라이버가 SQLConnect지원하는 경우 드라이버에 대한 시스템 정보의 드라이버 키워드 섹션에 첫 번째 문자가 "Y"로 설정된 ConnectFunctions 키워드가 포함되어야 합니다.

연결 풀링

연결 풀링을 사용하면 애플리케이션에서 이미 생성된 연결을 다시 사용할 수 있습니다. 연결 풀링을 사용하도록 설정하고 SQLConnect 를 호출하면 드라이버 관리자는 연결 풀링에 대해 지정된 환경에서 연결 풀의 일부인 연결을 사용하여 연결을 만들려고 합니다. 이 환경은 풀의 연결을 사용하는 모든 애플리케이션에서 사용하는 공유 환경입니다.

SQLSetEnvAttr를 호출하여 환경이 할당되기 전에 연결 풀링을 사용하도록 설정하여 SQL_ATTR_CONNECTION_POOLING SQL_CP_ONE_PER_DRIVER(드라이버당 최대 하나의 풀을 지정) 또는 SQL_CP_ONE_PER_HENV(환경당 최대 하나의 풀을 지정)로 설정합니다. 이 경우 SQLSetEnvAttr는 EnvironmentHandle을 null로 설정하여 호출되므로 특성이 프로세스 수준 특성이 됩니다. SQL_ATTR_CONNECTION_POOLING SQL_CP_OFF 설정하면 연결 풀링이 비활성화됩니다.

연결 풀링을 사용하도록 설정한 후에는 SQL_HANDLE_ENV HandleType이 있는 SQLAllocHandle이 호출되어 환경을 할당합니다. 연결 풀링을 사용하도록 설정했으므로 이 호출에 의해 할당된 환경은 공유 환경입니다. 그러나 사용할 환경은 SQL_HANDLE_DBC HandleType을 사용하는 SQLAllocHandle이 호출될 때까지 결정되지 않습니다.

SQL_HANDLE_DBC HandleType이 있는 SQLAllocHandle은 연결을 할당하기 위해 호출됩니다. 드라이버 관리자는 애플리케이션에서 설정한 환경 특성과 일치하는 기존 공유 환경을 찾으려고 합니다. 이러한 환경이 없으면 암시적 공유 환경으로 만들어집니다. 일치하는 공유 환경이 발견되면 환경 핸들이 애플리케이션에 반환되고 해당 참조 수가 증가합니다.

그러나 사용할 연결은 SQLConnect가 호출될 때까지 결정되지 않습니다. 이때 드라이버 관리자는 애플리케이션에서 요청한 조건과 일치하는 연결 풀에서 기존 연결을 찾으려고 합니다. 이러한 조건에는 SQLConnect 호출에서 요청된 연결 옵션(ServerName, UserName 및 Authentication 키워드 값)과 SQL_HANDLE_DBC HandleType이 호출된 SQLAllocHandle 이후 설정된 모든 연결 특성이 포함됩니다. 드라이버 관리자는 풀의 연결에서 해당 연결 키워드 및 특성에 대해 이러한 조건을 확인합니다. 일치 항목이 발견되면 풀의 연결이 사용됩니다. 일치하는 항목이 없으면 새 연결이 만들어집니다.

SQL_ATTR_CP_MATCH 환경 특성이 SQL_CP_STRICT_MATCH 설정되면 풀의 연결이 사용될 정확한 일치 항목이어야 합니다. SQL_ATTR_CP_MATCH 환경 특성이 SQL_CP_RELAXED_MATCH 설정되면 SQLConnect 호출의 연결 옵션이 일치해야 하지만 모든 연결 특성이 일치해야 하는 것은 아닙니다.

SQLConnect가 호출되기 전에 애플리케이션에서 설정한 연결 특성이 풀에 있는 연결의 연결 특성과 일치하지 않는 경우 다음 규칙이 적용됩니다.

  • 연결이 이루어지기 전에 연결 특성을 설정해야 하는 경우:

    SQL_ATTR_CP_MATCH SQL_CP_STRICT_MATCH 경우 풀된 연결의 SQL_ATTR_PACKET_SIZE 애플리케이션에서 설정한 특성과 동일해야 합니다. SQL_CP_RELAXED_MATCH 경우 SQL_ATTR_PACKET_SIZE 값이 다를 수 있습니다.

    SQL_ATTR_LOGIN_VALUE 값은 일치 항목에 영향을 주지 않습니다.

  • 연결 특성이 연결되기 전이나 후에 설정할 수 있는 경우:

    연결 특성이 애플리케이션에서 설정되지 않았지만 풀의 연결에 설정되어 있고 기본값이 있는 경우 풀된 연결의 연결 특성이 다시 기본값으로 설정되고 일치 항목이 선언됩니다. 기본값이 없으면 풀된 연결이 일치하는 것으로 간주되지 않습니다.

    연결 특성이 애플리케이션에서 설정되었지만 풀의 연결에서 설정되지 않은 경우 풀의 연결 특성이 애플리케이션에서 설정한 연결 특성으로 변경되고 일치 항목이 선언됩니다.

    연결 특성이 애플리케이션에 의해 설정되었으며 풀의 연결에서도 설정되었지만 값이 다른 경우 애플리케이션의 연결 특성 값이 사용되고 일치 항목이 선언됩니다.

  • 드라이버별 연결 특성의 값이 동일하지 않고 SQL_ATTR_CP_MATCH SQL_CP_STRICT_MATCH 설정되면 풀의 연결이 사용되지 않습니다.

애플리케이션에서 SQLDisconnect를 호출하여 연결을 끊으면 연결이 연결 풀로 반환되고 다시 사용할 수 있습니다.

연결 풀링 성능 최적화

분산 트랜잭션이 관련된 경우 SQLUINTEGER 비트 마스크인 SQL_DTC_TRANSITION_COST 사용하여 연결 풀링 성능을 최적화할 수 있습니다. 참조되는 전환은 값 0에서 0이 아닌 값으로 SQL_ATTR_ENLIST_IN_DTC 연결 특성의 전환이며 그 반대의 경우도 마찬가지입니다. 분산 트랜잭션에 등록되지 않고 분산 트랜잭션에 등록되는 연결이며 그 반대의 경우도 마찬가지입니다. 드라이버가 인리스트먼트(연결 특성 SQL_ATTR_ENLIST_IN_DTC 설정)를 구현하는 방법에 따라 이러한 전환은 비용이 많이 들 수 있으므로 최상의 성능을 위해 피해야 합니다.

드라이버에서 반환되는 값에는 다음 비트의 조합이 포함됩니다.

  • SQL_DTC_ENLIST_EXPENSIVE 설정할 때 0에서 0이 아닌 전환은 0이 아닌 값에서 다른 0이 아닌 값으로의 전환보다 훨씬 더 비쌉니다(이전에 등록한 연결을 다음 트랜잭션에 등록).

  • SQL_DTC_UNENLIST_EXPENSIVE 설정하면 0이 아닌 전환이 SQL_ATTR_ENLIST_IN_DTC 특성이 이미 0으로 설정된 연결을 사용하는 것보다 훨씬 더 비쌉니다.

성능과 연결 사용 절충이 있습니다. 드라이버에서 이러한 전환 중 하나 이상이 비싸다는 것을 나타내는 경우 드라이버 관리자의 연결 풀러는 풀에 더 많은 연결을 유지하여 이에 응답합니다. 풀의 일부 연결은 비트랜잭션 용도로 선호되며 일부는 트랜잭션 사용에 선호됩니다. 그러나 드라이버에서 이러한 전환이 비용이 많이 드는 것이 아니라는 것을 나타내는 경우 비정상 사용과 트랜잭션 사용 간에 번갈아 가며 더 적은 연결을 사용할 수 있습니다.

SQL_ATTR_ENLIST_IN_DTC 지원하지 않는 드라이버는 SQL_DTC_TRANSITION_COST 지원할 필요가 없습니다. SQL_ATTR_ENLIST_IN_DTC 지원하지만 SQL_DTC_TRANSITION_COST 않는 드라이버의 경우 드라이버가 이 값에 대해 0(비트 집합 없음)을 반환한 것처럼 전환 비용이 많이 드는 것으로 가정합니다.

SQL_DTC_TRANSITION_COST ODBC 3.5, ODBC 2에서 도입되었습니다.x 드라이버는 드라이버 버전에 관계없이 드라이버 관리자가 이 정보를 쿼리하기 때문에 이를 지원할 수도 있습니다.

코드 예

다음 예제에서 애플리케이션은 환경 및 연결 핸들을 할당합니다. 그런 다음 사용자 ID JohnS 및 암호 세서미를 사용하여 SalesOrders 데이터 원본에 연결하고 데이터를 처리합니다. 데이터 처리가 완료되면 데이터 원본에서 연결을 끊고 핸들을 해제합니다.

// SQLConnect_ref.cpp  
// compile with: odbc32.lib  
#include <windows.h>  
#include <sqlext.h>  
  
int main() {  
   SQLHENV henv;  
   SQLHDBC hdbc;  
   SQLHSTMT hstmt;  
   SQLRETURN retcode;  
  
   SQLCHAR * OutConnStr = (SQLCHAR * )malloc(255);  
   SQLSMALLINT * OutConnStrLen = (SQLSMALLINT *)malloc(255);  
  
   // Allocate environment handle  
   retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);  
  
   // Set the ODBC version environment attribute  
   if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {  
      retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);   
  
      // Allocate connection handle  
      if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {  
         retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);   
  
         // Set login timeout to 5 seconds  
         if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {  
            SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0);  
  
            // Connect to data source  
            retcode = SQLConnect(hdbc, (SQLCHAR*) "NorthWind", SQL_NTS, (SQLCHAR*) NULL, 0, NULL, 0);  
  
            // Allocate statement handle  
            if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {  
               retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);   
  
               // Process data  
               if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {  
                  SQLFreeHandle(SQL_HANDLE_STMT, hstmt);  
               }  
  
               SQLDisconnect(hdbc);  
            }  
  
            SQLFreeHandle(SQL_HANDLE_DBC, hdbc);  
         }  
      }  
      SQLFreeHandle(SQL_HANDLE_ENV, henv);  
   }  
}  
추가 정보 참조
핸들 할당 SQLAllocHandle 함수
데이터 원본에 연결하는 데 필요한 값 검색 및 열거 SQLBrowseConnect 함수
데이터 원본에서 연결 끊기 SQLDisconnect 함수
연결 문자열 또는 대화 상자를 사용하여 데이터 원본에 연결 SQLDriverConnect 함수
연결 특성 설정 반환 SQLGetConnectAttr 함수
연결 특성 설정 SQLSetConnectAttr 함수

참고 항목

ODBC API 참조
ODBC 헤더 파일