오류 및 메시지 처리
응용 프로그램이 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를 호출하여 메시지 데이터를 검색해야 합니다.
오류 추적에 대한 자세한 내용은 데이터 액세스 추적(Data Access Tracing)을 참조하십시오.