Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Az alkalmazások meghívják az SQLGetDiagRecet vagy az SQLGetDiagFieldet a diagnosztikai információk lekéréséhez. Ezek a függvények elfogadnak egy környezet, kapcsolat, utasítás vagy leíró fogantyút, és diagnosztikai adatokat adnak vissza arról a függvényről, amely legutoljára használta ezt a fogantyút. Az adott leírón naplózott diagnosztikát a rendszer elveti, amikor új függvényt hív meg ezzel a leíróval. Ha a függvény több diagnosztikai rekordot adott vissza, az alkalmazás többször hívja meg ezeket a függvényeket; a rendszer az állapotrekordok teljes számát a fejlécrekordhoz (0. rekord) tartozó SQLGetDiagField meghívásával kéri le a SQL_DIAG_NUMBER beállítással.
Az alkalmazások az SQLGetDiagField meghívásával és a lekérendő mező megadásával kérik le az egyes diagnosztikai mezőket. Bizonyos diagnosztikai mezőknek nincs jelentésük bizonyos típusú kezelői esetében. A diagnosztikai mezők és jelentésük listáját az SQLGetDiagField függvény leírásában találja.
Az alkalmazások egyetlen hívásban kérik le az SQLSTATE-t, a natív hibakódot és a diagnosztikai üzenetet az SQLGetDiagRec meghívásával; Az SQLGetDiagRec nem használható a fejlécrekord adatainak lekérésére.
A következő kód például egy SQL-utasítást kér a felhasználótól, és végrehajtja azt. Ha bármilyen diagnosztikai információt ad vissza, meghívja az SQLGetDiagFieldet az állapotrekordok és az SQLGetDiagRec számának lekéréséhez, hogy lekérje az SQLSTATE-t, a natív hibakódot és a diagnosztikai üzenetet ezektől a rekordoktól.
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.
}