SQLGetDiagRec függvény

Megfelelőség
Bemutatott verzió: ODBC 3.0 szabványoknak megfelelés: ISO 92

Summary
Az SQLGetDiagRec több diagnikus rekord mezőjének aktuális értékeit adja vissza, amelyek hiba-, figyelmeztetés- és állapotinformációkat tartalmaznak. Az SQLGetDiagField-lel ellentétben, amely hívásonként egy diagnosztikai mezőt ad vissza, az SQLGetDiagRec több gyakran használt diagnikus rekordmezőt is visszaad, beleértve az SQLSTATE-et, a natív hibakódot és a diagnosztikai üzenet szövegét.

Syntax

  
SQLRETURN SQLGetDiagRec(  
     SQLSMALLINT     HandleType,  
     SQLHANDLE       Handle,  
     SQLSMALLINT     RecNumber,  
     SQLCHAR *       SQLState,  
     SQLINTEGER *    NativeErrorPtr,  
     SQLCHAR *       MessageText,  
     SQLSMALLINT     BufferLength,  
     SQLSMALLINT *   TextLengthPtr);  

Arguments

HandleType
[Bemenet] Leírótípus-azonosító, amely azt a leírótípust írja le, amelyhez diagnosztikára van szükség. Az alábbiak egyikének kell lennie:

  • SQL_HANDLE_DBC

  • SQL_HANDLE_DBC_INFO_TOKEN

  • SQL_HANDLE_DESC

  • SQL_HANDLE_ENV

  • SQL_HANDLE_STMT

SQL_HANDLE_DBC_INFO_TOKEN leírót csak az illesztőprogram-kezelő és az illesztőprogram használja. Az alkalmazások nem használhatják ezt a leírótípust. További információért SQL_HANDLE_DBC_INFO_TOKEN lásd: Fejlődés Connection-Pool tudatosság egy ODBC meghajtóban.

Kezelőfelület
[Bemenet] A HandleTypeáltal jelzett típusú diagnosztikai adatstruktúra leírója. Ha HandleType SQL_HANDLE_ENV, Handle lehet megosztott vagy nem megosztott környezet leírója.

RecNumber
[Bemenet] Azt az állapotrekordot jelzi, amelyből az alkalmazás információt kér. Az állapotrekordok száma 1.

SQLState
[Kimenet] Mutató egy pufferre, amelyben öt karakteres SQLSTATE kódot (és a NULL-t végző) vissza lehet adni a diagnosztikai rekord RecNumber számára. Az első két karakter az osztályt jelzi; a következő három az alosztályt jelöli. Ez az információ a SQL_DIAG_SQLSTATE diagnosztikai területen található. További információ: SQLSTATEs.

NativeErrorPtr
[Kimenet] Mutató egy pufferre, amelyben vissza lehet adni a natív hibakódot, amely az adatforrásra jellemző. Ez az információ a SQL_DIAG_NATIVE diagnosztikai területen található.

Üzenetszöveg
[Kimenet] Mutató egy pufferre, ahol vissza lehet adni a diagnosztikai üzenet szövegláncot. Ez az információ a SQL_DIAG_MESSAGE_TEXT diagnosztikai területen található. A string formátumáról lásd: Diagnosztikai üzenetek.

Ha a MessageText NULL, a TextLengthPtr továbbra is visszaadja a MessageText által mutatott pufferben elérhető összes karakterszámot (kivéve a null-terminációs karaktert a karakteradatokhoz).

BufferLength
[Bemenet] A *MessageText puffer hossza karakterekben. A diagnosztikai üzenet szövegének nincs maximális hossza.

TextLengthPtr
[Kimenet] Mutató egy pufferre, amelyben vissza lehet adni a * MessageText formátumban vissza elérhető összes karakter számát (kivéve a null-terminációs karakterhez szükséges karakterek számát). Ha a visszatérhető karakterek száma nagyobb, mint a BufferLength, a *MessageText diagnosztikai üzenet szövege a null-terminációs karakter hosszát mínuszítva BufferLength-re rövidítik.

Returns

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_NO_DATA vagy SQL_INVALID_HANDLE.

Diagnostics

Az SQLGetDiagRec nem tesz közzé saját diagnosztikai rekordokat. A következő visszatérési értékeket használja a saját végrehajtásának eredményének jelentésére:

  • SQL_SUCCESS: A függvény sikeresen visszaadta a diagnosztikai adatokat.

  • SQL_SUCCESS_WITH_INFO: A *MessageText puffer túl kicsi volt a kért diagnosztikai üzenet tárolására. Nem készültek diagnosztikai feljegyzések. Ahhoz, hogy megállapítsuk, hogy csonkítás történt-e, az alkalmazásnak össze kell hasonlítania a BufferLength-t a rendelkezésre álló bájtok tényleges számával, amelyet a *TextLengthPtr-re írnak.

  • SQL_INVALID_HANDLE: Az HandleType és Handle által jelzett leíró nem volt érvényes.

  • SQL_ERROR: Az alábbiak egyike történt:

    • A RecNumber negatív vagy 0 volt.

    • BufferLength kevesebb volt, mint nulla.

    • Aszinkron értesítés használatakor a leíró aszinkron művelete nem fejeződött be.

  • SQL_NO_DATA: RecNumber nagyobb volt, mint a leíróban megadott leíróhoz tartozó diagnosztikai rekordok száma. A függvény SQL_NO_DATA ad vissza minden pozitív RecNumber, ha nincsenek diagnosztikai rekordok Handle.

Comments

Egy alkalmazás általában akkor hívja az SQLGetDiagRec-et , ha egy korábbi ODBC függvény hívása SQL_ERROR vagy SQL_SUCCESS_WITH_INFO visszaadott. Azonban mivel bármely ODBC függvény minden híváskor nulla vagy több diagnosztikai rekordot tud megjeleníteni, az alkalmazás bármelyik ODBC függvényhívás után hívhatja SQLGetDiagRec-et . Egy alkalmazás többször is hívhatja az SQLGetDiagRec-et , hogy visszaadja a diagnosztikai adatszerkezet egyes vagy összes rekordját. Az ODBC nem szab korlátot arra, hogy hány diagnosztikai rekordot tárolhatnak egyszerre.

Az SQLGetDiagRec nem használható a diagnosztikai adatstruktúra fejlécéből származó mezők visszaadására. ( A RecNumber érvnek nagyobbnak kell lennie 0-nál.) Az alkalmazásnak erre a célra SQLGetDiagField-et kell hívnia.

Az SQLGetDiagRec csak a Handle argumentumban megadott kezelő legutóbb kapcsolódó diagnosztikai információkat kéri. Ha az alkalmazás más ODBC függvényt hív, kivéve az SQLGetDiagRec-et, SQLGetDiagField vagy SQLError-t, akkor az előző hívásokból származó diagnosztikai információk elvesznek ugyanazon a kezelőn.

Egy alkalmazás minden diagnosztikai rekordot képes szkennelni RecNumber-i körforgással, növelve, amennyiben az SQLGetDiagRec SQL_SUCCESS visszaad. Az SQLGetDiagRec-hez irányuló hívások nem károsak a fejlécére és a rekordmezőkre. Az alkalmazás később ismét hívhatja az SQLGetDiagRec-et , hogy egy mezőt visszahívjon egy rekordból, amennyiben az interimben nem hívtak meg más függvényt, kivéve az SQLGetDiagRec, SQLGetDiagField vagy SQLError. Az alkalmazás az SQLGetDiagField segítségével is visszaszerezheti a rendelkezésre álló diagnosztikai rekordok számát, hogy meghívja a SQL_DIAG_NUMBER mező értékét, majd ennyiszer hívja az SQLGetDiagRec-et .

A diagnosztikai adatszerkezet mezőinek leírásáért lásd: SQLGetDiagField. További információ: SqlGetDiagRec és SQLGetDiagField és Implementing SQLGetDiagRec és SQLGetDiagField.

Az aszinkron módon végrehajtotttól eltérő API meghívása HY010 "Függvényütemezési hiba" lesz. A hibarekord azonban nem kérhető le az aszinkron művelet befejeződése előtt.

HandleType argumentum

Minden leírótípushoz tartozhatnak diagnosztikai adatok. A HandleType argumentum a Handle argumentum handle típusát jelöli.

Egyes fejléc- és rekordmezők nem adhatók vissza környezet-, kapcsolat-, utasítás- és leíróleíró-leírókhoz. Azok a kezelőfelületek, amelyekre egy mező nem alkalmazható, az SQLGetDiagField "Fejlécmezői" és "Rekordmezők" szekcióiban vannak jelölve.

Az SQLGetDiagRec hívás SQL_INVALID_HANDLE visszaadja a HandleType SQL_HANDLE_SENV, ami egy megosztott környezeti handle-t jelöl. Ha azonban a HandleType SQL_HANDLE_ENV, akkor a Handle lehet megosztott vagy nem megosztott környezeti handle.

Információ erről: Nézze
A diagnosztikai feljegyzés vagy a diagnosztikai fejléc mezőjének megszerzése SQLGetDiagField függvény