Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aplikacje wywołują SQLGetDiagRec lub SQLGetDiagField w celu pobrania informacji diagnostycznych. Te funkcje akceptują uchwyt środowiska, połączenia, instrukcji lub deskryptora i zwracają diagnostykę z funkcji, która ostatnio korzystała z tego uchwytu. Diagnostyka zarejestrowana dla określonego uchwytu jest odrzucana, gdy nowa funkcja jest wywoływana przy użyciu tego uchwytu. Jeśli funkcja zwróciła wiele rekordów diagnostycznych, aplikacja wywołuje te funkcje wiele razy; całkowita liczba rekordów stanu jest pobierana przez wywołanie pola SQLGetDiagField dla rekordu nagłówka (rekord 0) z opcją SQL_DIAG_NUMBER.
Aplikacje pobierają poszczególne pola diagnostyczne, wywołując polecenie SQLGetDiagField i określając pole do pobrania. Niektóre pola diagnostyczne nie mają żadnego znaczenia dla niektórych typów uchwytów. Aby uzyskać listę pól diagnostycznych i ich znaczenia, zobacz opis funkcji SQLGetDiagField .
Aplikacje pobierają kod SQLSTATE, kod błędu natywnego i komunikat diagnostyczny w jednym wywołaniu, wywołując metodę SQLGetDiagRec; Nie można użyć polecenia SQLGetDiagRec do pobrania informacji z rekordu nagłówka.
Na przykład poniższy kod wyświetla użytkownikowi monit o instrukcję SQL i wykonuje go. Jeśli zostały zwrócone jakiekolwiek informacje diagnostyczne, wywołuje SQLGetDiagField, aby uzyskać liczbę rekordów stanu, oraz SQLGetDiagRec w celu pobrania kodu SQLSTATE, natywnego kodu błędu i komunikatu diagnostycznego z tych rekordów.
SQLCHAR SqlState[6], SQLStmt[100], Msg[SQL_MAX_MESSAGE_LENGTH];
SQLINTEGER NativeError;
SQLSMALLINT i, MsgLen;
SQLRETURN rc1, rc2;
SQLHSTMT hstmt;
// Prompt the user for a 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.
}