Megosztás:


Az SQLGetDiagRec és az SQLGetDiagField használata

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.  
}