오류 및 메시지 처리
애플리케이션이 ODBC 함수를 호출하면 드라이버가 함수를 실행하고 반환 코드와 진단 레코드라는 두 가지 방법으로 진단 정보를 반환합니다. 반환 코드는 ODBC 함수의 전반적인 성공 또는 실패를 나타내고, 진단 레코드는 함수에 대한 자세한 정보를 제공합니다. 진단 레코드에는 헤더 레코드 및 상태 레코드가 포함됩니다. 함수가 성공하더라도 한 개 이상의 진단 레코드, 즉 헤더 레코드가 반환됩니다.
진단 정보는 개발 과정에서 잘못된 핸들이나 하드 코딩된 SQL 문의 구문 오류와 같은 프로그래밍 오류를 파악하는 데 사용됩니다. 이 밖에도 런타임에 데이터 잘림, 규칙 위반 및 사용자가 입력한 SQL 문의 구문 오류와 같은 런타임 오류 및 경고를 파악하는 데도 사용됩니다. 프로그램 논리는 일반적으로 반환 코드에 기반을 둡니다.
예를 들어 애플리케이션이 SQLFetch 를 호출하여 결과 집합의 행을 검색한 후 반환 코드는 결과 집합의 끝에 도달했는지(SQL_NO_DATA), 정보 메시지가 반환되었는지(SQL_SUCCESS_WITH_INFO) 또는 오류가 발생했는지(SQL_ERROR)를 나타냅니다.
SQL Server Native Client ODBC 드라이버가 SQL_SUCCESS 이외의 항목을 반환하는 경우 애플리케이션은 SQLGetDiagRec를 호출하여 정보 또는 오류 메시지를 검색할 수 있습니다. 두 개 이상의 메시지가 있는 경우 SQLGetDiagRec 를 사용하여 메시지 집합을 위아래로 스크롤합니다.
반환 코드 SQL_INVALID_HANDLE은 항상 프로그래밍 오류를 나타내며 런타임에 발생하지 않도록 해야 합니다. 다른 모든 반환 코드는 런타임 정보를 나타내며 SQL_ERROR는 프로그래밍 오류를 나타내는 경우가 있습니다.
원래 Microsoft SQL Server 네이티브 API(C용 DB-Library)를 사용하면 애플리케이션이 오류 또는 메시지를 반환하는 콜백 오류 처리 및 메시지 처리 함수를 설치할 수 있습니다. PRINT, RAISERROR, DBCC 및 SET와 같은 일부 Transact-SQL 문은 결과 집합 대신 DB-Library 메시지 처리기 함수로 결과를 반환합니다. 그러나 ODBC API에는 이러한 콜백 기능이 없습니다. SQL Server Native Client ODBC 드라이버가 SQL Server 들어오는 메시지를 검색하면 ODBC 반환 코드를 SQL_SUCCESS_WITH_INFO 또는 SQL_ERROR 설정하고 메시지를 하나 이상의 진단 레코드로 반환합니다. 따라서 ODBC 애플리케이션은 이러한 반환 코드를 신중하게 테스트하고 SQLGetDiagRec 를 호출하여 메시지 데이터를 검색해야 합니다.
오류 추적에 대한 자세한 내용은 데이터 액세스 추적을 참조하십시오. SQL Server 2012에서 추가된 오류 추적에 대한 향상된 기능은 확장 이벤트 로그에서 진단 정보 액세스를 참조하세요.