데이터 원본에 연결(ODBC)
응용 프로그램은 환경 및 연결 핸들을 할당하고 연결 특성을 설정한 후 데이터 원본이나 드라이버에 연결합니다. 연결에 사용할 수 있는 함수는 다음과 같이 세 가지가 있습니다.
SQLConnect
SQLDriverConnect
SQLBrowseConnect
사용할 수 있는 다양한 연결 문자열 옵션을 비롯하여 데이터 원본에 연결하는 자세한 방법은 SQL Server Native Client에서 연결 문자열 키워드 사용을 참조하십시오.
SQLConnect
SQLConnect는 가장 단순한 연결 함수입니다. 이 함수는 데이터 원본 이름, 사용자 ID 및 암호의 세 가지 매개 변수를 허용합니다. 데이터베이스 연결에 필요한 모든 정보가 이 세 매개 변수에 포함되는 경우 SQLConnect를 사용합니다. 이렇게 하려면 SQLDataSources를 사용하여 데이터 원본 목록을 만들고 데이터 원본, 사용자 ID 및 암호를 묻는 메시지를 사용자에게 표시한 다음 SQLConnect를 호출합니다.
SQLConnect는 데이터 원본 이름, 사용자 ID 및 암호만으로도 데이터 원본에 연결하는 데 충분하며 ODBC 드라이버가 해당 연결을 만드는 데 필요한 다른 모든 정보가 ODBC 데이터 원본에 포함되어 있다고 가정합니다. SQLDriverConnect 및 SQLBrowseConnect와는 달리 SQLConnect는 연결 문자열을 사용하지 않습니다.
SQLDriverConnect
SQLDriverConnect는 데이터 원본 이름, 사용자 ID 및 암호 이외의 추가 정보가 필요한 경우 사용합니다. SQLDriverConnect에 대한 매개 변수 중 하나는 드라이버 관련 정보를 포함하는 연결 문자열입니다. 다음과 같은 경우 SQLConnect 대신 SQLDriverConnect를 사용할 수 있습니다.
연결 시 드라이버 관련 정보를 지정하려는 경우
드라이버가 연결 정보를 묻는 메시지를 사용자에게 표시하도록 하려는 경우
ODBC 데이터 원본을 사용하지 않고 연결하려는 경우
SQLDriverConnect 연결 문자열에는 ODBC 드라이버에서 지원하는 모든 연결 정보를 지정하는 일련의 키워드와 값 쌍이 포함됩니다. 각 드라이버는 드라이버에서 지원하는 모든 연결 정보에 대해 해당 드라이버의 키워드와 함께 표준 ODBC 키워드(DSN, FILEDSN, DRIVER, UID, PWD 및 SAVEFILE)를 지원합니다. SQLDriverConnect를 사용하면 데이터 원본을 사용하지 않고 연결할 수 있습니다. 예를 들어 SQL Server 인스턴스에 "DSN 없이" 연결하도록 디자인된 응용 프로그램의 경우 로그인 ID, 암호, 네트워크 라이브러리, 연결할 서버 이름 및 사용할 기본 데이터베이스를 정의하는 연결 문자열을 사용하여 SQLDriverConnect를 호출할 수 있습니다.
SQLDriverConnect를 사용할 경우 두 가지 옵션을 통해 필요한 연결 정보를 사용자에게 묻는 메시지를 표시할 수 있습니다.
응용 프로그램 대화 상자
연결 정보를 묻는 응용 프로그램 대화 상자를 만든 다음 NULL 창 핸들을 지정하고 DriverCompletion을 SQL_DRIVER_NOPROMPT로 설정하여 SQLDriverConnect를 호출합니다. 매개 변수를 이렇게 설정하면 ODBC 드라이버가 자체 대화 상자를 열지 않습니다. 이 방법은 응용 프로그램의 사용자 인터페이스를 제어해야 하는 경우 사용합니다.
드라이버 대화 상자
올바른 창 핸들을 SQLDriverConnect에 전달하고 DriverCompletion 매개 변수를 SQL_DRIVER_COMPLETE, SQL_DRIVER_PROMPT 또는 SQL_DRIVER_COMPLETE_REQUIRED로 설정하도록 응용 프로그램을 코딩할 수 있습니다. 그러면 사용자에게 연결 정보를 묻는 대화 상자를 드라이버에서 생성합니다. 이 방법을 사용할 경우 응용 프로그램 코드가 단순해집니다.
SQLBrowseConnect
SQLBrowseConnect는 SQLDriverConnect와 마찬가지로 연결 문자열을 사용합니다. 그러나 SQLBrowseConnect를 사용할 경우 응용 프로그램에서 런타임에 데이터 원본을 사용하여 전체 연결 문자열을 반복해서 생성할 수 있습니다. 이를 통해 응용 프로그램에서는 다음 두 가지 작업이 가능해집니다.
해당 정보를 묻는 고유의 대화 상자를 만듭니다. 따라서 해당 사용자 인터페이스에 대한 제어를 유지할 수 있습니다.
특정 드라이버에서 사용할 수 있는 데이터 원본을 몇 개의 단계에 따라 시스템에서 찾습니다.
예를 들어 사용자는 먼저 네트워크에서 서버를 찾아서 선택한 다음 이 서버에서 드라이버가 액세스할 수 있는 데이터베이스를 찾습니다.
SQLBrowseConnect가 성공적으로 연결을 수행하면 이후의 SQLDriverConnect 호출에서 사용할 수 있는 연결 문자열을 반환합니다.
SQL Server Native Client ODBC 드라이버는 SQLConnect, SQLDriverConnect 또는 SQLBrowseConnect가 성공적으로 완료된 경우 항상 SQL_SUCCESS_WITH_INFO를 반환합니다. ODBC 응용 프로그램이 QL_SUCCESS_WITH_INFO를 받은 후 SQLGetDiagRec을 호출하면 다음 메시지를 받을 수 있습니다.
5701
SQL Server에서 데이터 원본에 정의된 기본 데이터베이스 또는 데이터 원본에 기본 데이터베이스가 없는 경우 연결에 사용된 로그인 ID에 대해 정의된 기본 데이터베이스에 사용자의 컨텍스트를 가져옴을 나타냅니다.5703
서버에서 사용 중인 언어를 나타냅니다.
다음 예에서는 시스템 관리자가 연결을 성공적으로 수행한 경우 반환되는 메시지를 보여 줍니다.
szSqlState = "01000", *pfNativeError = 5701,
szErrorMsg="[Microsoft][SQL Server Native Client][SQL Server]
Changed database context to 'pubs'."
szSqlState = "01000", *pfNativeError = 5703,
szErrorMsg="[Microsoft][SQL Server Native Client][SQL Server]
Changed language setting to 'us_english'."
메시지 5701 및 5703은 정보 메시지일 뿐이므로 무시해도 됩니다. 그러나 5701이나 5703 이외의 메시지가 반환될 수 있으므로 SQL_SUCCESS_WITH_INFO 반환 코드를 주의해서 검토해야 합니다. 예를 들어 드라이버가 오래된 카탈로그 저장 프로시저를 사용하여 SQL Server 인스턴스를 실행 중인 서버에 연결할 경우 SQL_SUCCESS_WITH_INFO를 받은 후 SQLGetDiagRec을 호출하면 오류가 반환됩니다. 다음은 이러한 오류 중 하나입니다.
SqlState: 01000
pfNative: 0
szErrorMsg: "[Microsoft][SQL Server Native Client]The ODBC
catalog stored procedures installed on server
my65server are version 06.50.0193; version 07.00.0205
or later is required to ensure proper operation.
Please contact your system administrator."
이 경우 SQL Server 연결에 대한 응용 프로그램의 오류 처리 함수가 SQL_NO_DATA가 반환될 때까지 SQLGetDiagRec을 호출한 다음 pfNative 코드가 5701 또는 5703인 메시지를 제외한 다른 모든 메시지에 대해 적절한 동작을 수행해야 합니다.
연결 상태 확인
SQL Server 2000 이상에서는 SQL_ATTR_CONNECTION_DEAD 및 SQL_COPT_SS_CONNECTION_DEAD의 동작이 이전 버전과 다릅니다. SQL Server 2000 이상에서는 SQL_ATTR_CONNECTION_DEAD가 연결의 가장 최근 상태를 반환하는데 이 상태가 현재 연결 상태가 아닐 수도 있습니다. 그러나 SQL_COPT_SS_CONNECTION_DEAD는 항상 네트워크 라이브러리에서 연결의 현재 상태를 쿼리합니다.
이 두 동작을 구별하기 위해 SQL Server 2000 이상 포함 파일에서 SQL_COPT_SS_CONNECTION_DEAD에 새로운 값이 지정되었습니다. SQL Server 2000 이상의 헤더를 사용하여 만들어진 이 특성을 사용하는 응용 프로그램의 경우 SQL Server 버전 7.0 드라이버를 사용하여 실행할 경우 오류((HY092, 잘못된 특성/옵션 식별자)를 반환합니다. SQLGetConnectAttr을 호출하기 전에 응용 프로그램에서 사용 중인 드라이버 버전을 확인하여 응용 프로그램이 SQL Server 7.0 드라이버에서 실행 중이면 SQL_COPT_SS_CONNECTION_DEAD 대신 SQL_ATTR_CONNECTION_DEAD를 사용하는 것이 좋습니다.