SQLGetDiagRec 및 SQLGetDiagField 사용
애플리케이션은 SQLGetDiagRec 또는 SQLGetDiagField를 호출하여 진단 정보를 검색합니다. 이러한 함수는 환경, 연결, 문 또는 설명자 핸들을 수락하고 해당 핸들을 마지막으로 사용한 함수에서 진단 반환합니다. 특정 핸들에 기록된 진단 해당 핸들을 사용하여 새 함수를 호출할 때 카드 해제됩니다. 함수가 여러 진단 레코드를 반환하는 경우 애플리케이션은 이러한 함수를 여러 번 호출합니다. SQL_DIAG_NUMBER 옵션을 사용하여 헤더 레코드(레코드 0)에 대해 SQLGetDiagField를 호출하여 총 상태 레코드 수를 검색합니다.
애플리케이션은 SQLGetDiagField를 호출하고 검색할 필드를 지정하여 개별 진단 필드를 검색합니다. 특정 진단 필드는 특정 유형의 핸들에 아무 의미가 없습니다. 진단 필드 및 해당 의미 목록은 SQLGetDiagField 함수 설명을 참조하세요.
애플리케이션은 SQLGetDiagRec를 호출하여 단일 호출에서 SQLSTATE, 네이티브 오류 코드 및 진단 메시지를 검색합니다.SQLGetDiagRec는 헤더 레코드에서 정보를 검색하는 데 사용할 수 없습니다.
예를 들어 다음 코드는 사용자에게 SQL 문을 묻는 메시지를 표시하고 실행합니다. 진단 정보가 반환된 경우 SQLGetDiagField를 호출하여 상태 레코드 및 SQLGetDiagRec 수를 가져와서 해당 레코드에서 SQLSTATE, 네이티브 오류 코드 및 진단 메시지를 가져옵니다.
SQLCHAR SqlState[6], SQLStmt[100], Msg[SQL_MAX_MESSAGE_LENGTH];
SQLINTEGER NativeError;
SQLSMALLINT i, MsgLen;
SQLRETURN rc1, rc2;
SQLHSTMT hstmt;
// Prompt the user for an SQL statement.
GetSQLStmt(SQLStmt);
// Execute the SQL statement and return any errors or warnings.
rc1 = SQLExecDirect(hstmt, SQLStmt, SQL_NTS);
if ((rc1 == SQL_SUCCESS_WITH_INFO) || (rc1 == SQL_ERROR)) {
SQLLEN numRecs = 0;
SQLGetDiagField(SQL_HANDLE_STMT, hstmt, 0, SQL_DIAG_NUMBER, &numRecs, 0, 0);
// Get the status records.
i = 1;
while (i <= numRecs && (rc2 = SQLGetDiagRec(SQL_HANDLE_STMT, hstmt, i, SqlState, &NativeError,
Msg, sizeof(Msg), &MsgLen)) != SQL_NO_DATA) {
DisplayError(SqlState,NativeError,Msg,MsgLen);
i++;
}
}
if ((rc1 == SQL_SUCCESS) || (rc1 == SQL_SUCCESS_WITH_INFO)) {
// Process statement results, if any.
}