Freigeben über


SQLGetDiagField-Funktion

Konformitäts-
Version eingeführt: ODBC 3.0 Standards Compliance: ISO 92

Zusammenfassung
SQLGetDiagField den aktuellen Wert eines Felds eines Datensatzes der Diagnosedatenstruktur (zugeordnet mit einem angegebenen Handle) zurück, der Fehler-, Warnungs- und Statusinformationen enthält.

Syntax


SQLRETURN SQLGetDiagField(  
     SQLSMALLINT     HandleType,  
     SQLHANDLE       Handle,  
     SQLSMALLINT     RecNumber,  
     SQLSMALLINT     DiagIdentifier,  
     SQLPOINTER      DiagInfoPtr,  
     SQLSMALLINT     BufferLength,  
     SQLSMALLINT *   StringLengthPtr);  

Argumente

HandleType-
[Eingabe] Ein Handletypbezeichner, der den Typ des Handles beschreibt, für den Diagnosen erforderlich sind. Muss eine der folgenden Werte sein:

  • SQL_HANDLE_DBC

  • SQL_HANDLE_DBC_INFO_TOKEN

  • SQL_HANDLE_DESC

  • SQL_HANDLE_ENV

  • SQL_HANDLE_STMT

SQL_HANDLE_DBC_INFO_TOKEN Handle wird nur vom Treiber-Manager und Treiber verwendet. Anwendungen sollten diesen Handletyp nicht verwenden. Weitere Informationen zu SQL_HANDLE_DBC_INFO_TOKEN finden Sie unter Developing Connection-Pool Awareness in einem ODBC-Treiber-.

behandeln
[Eingabe] Ein Handle für die Diagnosedatenstruktur des Typs, der durch HandleTypeangegeben ist. Wenn HandleType- SQL_HANDLE_ENV ist, kann Handle entweder ein freigegebenes oder nicht freigegebenes Umgebungshandle sein.

RecNumber-
[Eingabe] Gibt den Statusdatensatz an, aus dem die Anwendung Informationen angibt. Statusdatensätze werden von 1 nummeriert. Wenn das argument DiagIdentifier ein beliebiges Feld des Diagnoseheaders angibt, wird RecNumber- ignoriert. Wenn nicht, sollte es mehr als 0 sein.

DiagIdentifier-
[Eingabe] Gibt das Feld der Diagnose an, dessen Wert zurückgegeben werden soll. Weitere Informationen finden Sie im Abschnitt "DiagIdentifier Argument" in "Kommentare".

DiagInfoPtr-
[Ausgabe] Zeigen Sie auf einen Puffer, in dem die Diagnoseinformationen zurückgegeben werden sollen. Der Datentyp hängt vom Wert DiagIdentifierab. Wenn DiagInfoPtr ein ganzzahliger Typ ist, sollten Anwendungen einen Puffer von SQLULEN verwenden und den Wert vor dem Aufrufen dieser Funktion auf 0 initialisieren, da einige Treiber möglicherweise nur die untere 32-Bit- oder 16-Bit-Version eines Puffers schreiben und das Bit der höheren Reihenfolge unverändert lassen.

Wenn DiagInfoPtr- NULL ist, gibt StringLengthPtr- weiterhin die Gesamtanzahl der Bytes zurück (ohne das Nullendpunktzeichen für Zeichendaten), das für die Rückgabe im Puffer verfügbar ist, auf DiagInfoPtrverweist.

BufferLength-
[Eingabe] Wenn DiagIdentifier eine ODBC-definierte Diagnose ist und DiagInfoPtr auf eine Zeichenzeichenfolge oder einen Binären Puffer zeigt, sollte dieses Argument die Länge von *DiagInfoPtrsein. Wenn DiagIdentifier- ein ODBC-definiertes Feld ist und *DiagInfoPtr eine ganze Zahl ist, wird BufferLength- ignoriert. Wenn der Wert in *DiagInfoPtr eine Unicode-Zeichenfolge ist (beim Aufrufen SQLGetDiagFieldW), muss das argument BufferLength eine gerade Zahl sein.

Wenn DiagIdentifier ein treiberdefiniertes Feld ist, gibt die Anwendung die Art des Felds an den Treiber-Manager an, indem sie das argument BufferLength festlegen. BufferLength- können die folgenden Werte aufweisen:

  • Wenn DiagInfoPtr- ein Zeiger auf eine Zeichenfolge ist, ist BufferLength- die Länge der Zeichenfolge oder SQL_NTS.

  • Wenn DiagInfoPtr- ein Zeiger auf einen Binärpuffer ist, platziert die Anwendung das Ergebnis des SQL_LEN_BINARY_ATTR(Länge) Makros in BufferLength-. Dadurch wird ein negativer Wert in BufferLength-platziert.

  • Wenn DiagInfoPtr- ein Zeiger auf einen anderen Wert als eine Zeichenfolge oder binäre Zeichenfolge ist, sollte BufferLength- den Wert SQL_IS_POINTER aufweisen.

  • Wenn *DiagInfoPtr einen Datentyp mit fester Länge enthält, ist BufferLength- nach Bedarf SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT oder SQL_IS_USMALLINT.

StringLengthPtr-
[Ausgabe] Zeiger auf einen Puffer, in dem die Gesamtanzahl der Bytes zurückgegeben werden soll (mit Ausnahme der Anzahl der Bytes, die für das Nullendpunktzeichen erforderlich sind), die für die Rückgabe in *DiagInfoPtrfür Zeichendaten verfügbar sind. Wenn die Anzahl der zurückzugebenden Bytes größer oder gleich BufferLength-ist, wird der Text in *DiagInfoPtr abgeschnitten, um BufferLength minus der Länge eines NULL-Beendigungszeichens abgeschnitten.

Ertrag

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE oder SQL_NO_DATA.

Diagnostik

SQLGetDiagField keine Diagnosedatensätze für sich selbst bereitstellen. Es verwendet die folgenden Rückgabewerte, um das Ergebnis der eigenen Ausführung zu melden:

  • SQL_SUCCESS: Die Funktion hat diagnoseinformationen erfolgreich zurückgegeben.

  • SQL_SUCCESS_WITH_INFO: *DiagInfoPtr war zu klein, um das angeforderte Diagnosefeld zu halten. Daher wurden die Daten im Diagnosefeld abgeschnitten. Um festzustellen, dass eine Abkürzung erfolgt ist, muss die Anwendung BufferLength- mit der tatsächlichen Anzahl der verfügbaren Bytes vergleichen, die in *StringLengthPtrgeschrieben wird.

  • SQL_INVALID_HANDLE: Der von HandleType angegebene Handle und Handle war kein gültiger Handle.

  • SQL_ERROR: Eine der folgenden Aktionen ist aufgetreten:

    • Das Argument "DiagIdentifier" war keiner der gültigen Werte.

    • Das Argument DiagIdentifier war SQL_DIAG_CURSOR_ROW_COUNT, SQL_DIAG_DYNAMIC_FUNCTION, SQL_DIAG_DYNAMIC_FUNCTION_CODE oder SQL_DIAG_ROW_COUNT, aber Handle war kein Anweisungshandle. (Der Treiber-Manager gibt diese Diagnose zurück.)

    • Das Argument RecNumber war negativ oder 0, wenn DiagIdentifier ein Feld aus einem Diagnosedatensatz anzeigte. RecNumber- wird für Kopfzeilenfelder ignoriert.

    • Der angeforderte Wert war eine Zeichenfolge, und BufferLength- kleiner als Null war.

    • Bei Verwendung asynchroner Benachrichtigung war der asynchrone Vorgang für das Handle nicht abgeschlossen.

  • SQL_NO_DATA: RecNumber- war größer als die Anzahl der Diagnosedatensätze, die für den in Handle angegebenen Handle vorhanden waren. Die Funktion gibt auch SQL_NO_DATA für alle positiven RecNumber- zurück, wenn keine Diagnosedatensätze für Handlevorhanden sind.

Kommentare

Eine Anwendung ruft in der Regel SQLGetDiagField- auf, um eines von drei Zielen zu erreichen:

  1. So erhalten Sie bestimmte Fehler- oder Warnungsinformationen, wenn ein Funktionsaufruf SQL_ERROR oder SQL_SUCCESS_WITH_INFO (oder SQL_NEED_DATA für die SQLBrowseConnect-funktion zurückgegeben hat).

  2. Um die Anzahl der Zeilen in der Datenquelle zu ermitteln, die beim Einfügen, Löschen oder Aktualisieren von Vorgängen betroffen waren, mit einem Aufruf von SQLExecute, SQLExecDirect, SQLBulkOperationsoder SQLSetPos (aus dem Feld SQL_DIAG_ROW_COUNT Kopfzeile) oder um die Anzahl der Zeilen zu bestimmen, die im aktuellen geöffneten Cursor vorhanden sind, wenn der Treiber diese Informationen bereitstellen kann (aus dem SQL_DIAG_CURSOR_ROW_COUNT Kopfzeilenfeld).

  3. Um zu bestimmen, welche Funktion durch einen Aufruf von SQLExecDirect oder SQLExecute- ausgeführt wurde (aus den Feldern SQL_DIAG_DYNAMIC_FUNCTION und SQL_DIAG_DYNAMIC_FUNCTION_CODE Header).

Jede ODBC-Funktion kann jedes Mal, wenn sie aufgerufen wird, null oder mehr Diagnosedatensätze bereitstellen, sodass eine Anwendung SQLGetDiagField- nach jedem ODBC-Funktionsaufruf aufrufen kann. Es gibt keine Beschränkung auf die Anzahl der Diagnosedatensätze, die jederzeit gespeichert werden können. SQLGetDiagField ruft nur die Diagnoseinformationen ab, die zuletzt der im Argument Handle angegebenen Diagnosedatenstruktur zugeordnet sind. Wenn die Anwendung eine andere ODBC-Funktion als SQLGetDiagField oder SQLGetDiagRecaufruft, gehen alle Diagnoseinformationen aus einem vorherigen Aufruf mit demselben Handle verloren.

Eine Anwendung kann alle Diagnosedatensätze scannen, indem RecNumber-erhöht wird, solange SQLGetDiagField SQL_SUCCESS zurückgibt. Die Anzahl der Statusdatensätze wird im kopfzeilenfeld SQL_DIAG_NUMBER angegeben. Aufrufe von SQLGetDiagField- sind nicht destruktiv für die Kopfzeilen- und Datensatzfelder. Die Anwendung kann SQLGetDiagField- später erneut aufrufen, um ein Feld aus einem Datensatz abzurufen, solange eine andere Funktion als die Diagnosefunktionen nicht in der Zwischenzeit aufgerufen wurde, was Datensätze auf demselben Handle posten würde.

Eine Anwendung kann SQLGetDiagField- aufrufen, um jedes Diagnosefeld jederzeit zurückzugeben, mit Ausnahme von SQL_DIAG_CURSOR_ROW_COUNT oder SQL_DIAG_ROW_COUNT, was SQL_ERROR zurückgibt, wenn Handle kein Anweisungshandle ist. Wenn ein anderes Diagnosefeld nicht definiert ist, gibt der Aufruf von SQLGetDiagField- SQL_SUCCESS zurück (sofern keine andere Diagnose erkannt wird), und für das Feld wird ein nicht definierter Wert zurückgegeben.

Weitere Informationen finden Sie unter Using SQLGetDiagRec and SQLGetDiagField and Implementing SQLGetDiagRec and SQLGetDiagField.

Wenn Sie eine andere API als die api aufrufen, die asynchron ausgeführt wird, wird HY010 "Funktionssequenzfehler" generiert. Der Fehlerdatensatz kann jedoch nicht abgerufen werden, bevor der asynchrone Vorgang abgeschlossen ist.

HandleType-Argument

Jeder Handletyp kann diagnoseinformationen zugeordnet sein. Das argument HandleType gibt den Handletyp Handlean.

Einige Header- und Datensatzfelder können nicht für Umgebungs-, Verbindungs-, Anweisungs- und Deskriptorhandles zurückgegeben werden. Diese Handles, für die ein Feld nicht anwendbar ist, werden in den folgenden Abschnitten "Kopfzeilenfelder" und "Datensatzfelder" angegeben.

Wenn HandleType- SQL_HANDLE_ENV ist, kann Handle entweder ein freigegebenes oder nicht freigegebenes Umgebungshandle sein.

Es sollten keine treiberspezifischen Headerdiagnosefelder einem Umgebungshandle zugeordnet werden.

Die einzigen Diagnoseheaderfelder, die für ein Deskriptorhandle definiert sind, sind SQL_DIAG_NUMBER und SQL_DIAG_RETURNCODE.

DiagIdentifier-Argument

Dieses Argument gibt den Bezeichner des Felds an, das aus der Diagnosedatenstruktur erforderlich ist. Wenn RecNumber- größer oder gleich 1 ist, werden in den Daten im Feld die von einer Funktion zurückgegebenen Diagnoseinformationen beschrieben. Wenn RecNumber 0 ist, befindet sich das Feld in der Kopfzeile der Diagnosedatenstruktur und enthält daher Daten im Zusammenhang mit dem Funktionsaufruf, der die Diagnoseinformationen zurückgegeben hat, nicht zu den spezifischen Informationen.

Treiber können treiberspezifische Kopfzeilen- und Datensatzfelder in der Diagnosedatenstruktur definieren.

Eine ODBC 3*.x*-Anwendung, die mit einem ODBC 2*.x*-Treiber arbeitet, kann SQLGetDiagField- nur mit einem DiagIdentifier--Argument von SQL_DIAG_CLASS_ORIGIN, SQL_DIAG_CLASS_SUBCLASS_ORIGIN, SQL_DIAG_CONNECTION_NAME, SQL_DIAG_MESSAGE_TEXT, SQL_DIAG_NATIVE, SQL_DIAG_NUMBER, SQL_DIAG_RETURNCODE, SQL_DIAG_SERVER_NAME, aufrufen. oder SQL_DIAG_SQLSTATE. Alle anderen Diagnosefelder geben SQL_ERROR zurück.

Kopfzeilenfelder

Die in der folgenden Tabelle aufgeführten Kopfzeilenfelder können im argument DiagIdentifier enthalten sein.

DiagIdentifier Rückgabetyp Ertrag
SQL_DIAG_CURSOR_ROW_COUNT SQLLEN Dieses Feld enthält die Anzahl der Zeilen im Cursor. Die Semantik hängt von den SQLGetInfo Informationstypen SQL_DYNAMIC_CURSOR_ATTRIBUTES2, SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2, SQL_KEYSET_CURSOR_ATTRIBUTES2 und SQL_STATIC_CURSOR_ATTRIBUTES2 ab, die angeben, welche Zeilenanzahl für jeden Cursortyp (in den bits SQL_CA2_CRC_EXACT und SQL_CA2_CRC_APPROXIMATE) verfügbar sind.

Der Inhalt dieses Felds wird nur für Anweisungshandles definiert und nur nach SQLExecute, SQLExecDirect-oder SQLMoreResults- aufgerufen. Das Aufrufen SQLGetDiagField- mit einem DiagIdentifier- von SQL_DIAG_CURSOR_ROW_COUNT auf einem anderen Anweisungshandle als einem Anweisungshandle wird SQL_ERROR zurückgegeben.
SQL_DIAG_DYNAMIC_FUNCTION SQLCHAR * Dies ist eine Zeichenfolge, die die SQL-Anweisung beschreibt, die die zugrunde liegende Funktion ausgeführt hat. (Weitere Informationen zu bestimmten Werten finden Sie weiter unten in diesem Abschnitt unter "Werte der Felder der dynamischen Funktion".) Der Inhalt dieses Felds wird nur für Anweisungshandles definiert und nur nach einem Aufruf von SQLExecute, SQLExecDirectoder SQLMoreResults. Das Aufrufen SQLGetDiagField- mit einem DiagIdentifier- von SQL_DIAG_DYNAMIC_FUNCTION auf einem anderen Anweisungshandle als einem Anweisungshandle wird SQL_ERROR zurückgegeben. Der Wert dieses Felds ist nicht definiert, bevor ein Aufruf von SQLExecute oder SQLExecDirect-.
SQL_DIAG_DYNAMIC_FUNCTION_CODE SQLINTEGER Dies ist ein numerischer Code, der die SQL-Anweisung beschreibt, die von der zugrunde liegenden Funktion ausgeführt wurde. (Weitere Informationen finden Sie unter "Werte der Dynamischen Funktionsfelder", weiter unten in diesem Abschnitt, um einen bestimmten Wert zu ermitteln.) Der Inhalt dieses Felds wird nur für Anweisungshandles definiert und nur nach einem Aufruf von SQLExecute, SQLExecDirectoder SQLMoreResults. Das Aufrufen SQLGetDiagField- mit einem DiagIdentifier- von SQL_DIAG_DYNAMIC_FUNCTION_CODE auf einem anderen Anweisungshandle als einem Anweisungshandle wird SQL_ERROR zurückgegeben. Der Wert dieses Felds ist nicht definiert, bevor ein Aufruf von SQLExecute oder SQLExecDirect-.
SQL_DIAG_NUMBER SQLINTEGER Die Anzahl der Statusdatensätze, die für das angegebene Handle verfügbar sind.
SQL_DIAG_RETURNCODE SQLRETURN Gibt Code zurück, der von der Funktion zurückgegeben wird. Eine Liste der Rückgabecodes finden Sie unter Rückgabecodes. Der Treiber muss nicht SQL_DIAG_RETURNCODE implementieren; sie wird immer vom Treiber-Manager implementiert. Wenn noch keine Funktion für das Handleaufgerufen wurde, wird SQL_SUCCESS für SQL_DIAG_RETURNCODE zurückgegeben.
SQL_DIAG_ROW_COUNT SQLLEN Die Anzahl der Zeilen, die von einem Einfügen, Löschen oder Aktualisieren betroffen sind, die von SQLExecute, SQLExecDirect, SQLBulkOperationsoder SQLSetPosausgeführt werden. Es wird treiberdefiniert, nachdem eine Cursorspezifikation ausgeführt wurde. Der Inhalt dieses Felds wird nur für Anweisungshandles definiert. Das Aufrufen SQLGetDiagField- mit einem DiagIdentifier- von SQL_DIAG_ROW_COUNT auf einem anderen Anweisungshandle als einem Anweisungshandle wird SQL_ERROR zurückgegeben. Die Daten in diesem Feld werden auch im RowCountPtr Argument SQLRowCountzurückgegeben. Die Daten in diesem Feld werden nach jedem nichtdiagnostischen Funktionsaufruf zurückgesetzt, während die zeilenanzahl, die von SQLRowCount zurückgegeben wird, unverändert bleibt, bis die Anweisung auf den vorbereiteten oder zugewiesenen Zustand zurückgesetzt wird.

Datensatzfelder

Die in der folgenden Tabelle aufgeführten Datensatzfelder können in das argument DiagIdentifier eingeschlossen werden.

DiagIdentifier Rückgabetyp Ertrag
SQL_DIAG_CLASS_ORIGIN SQLCHAR * Eine Zeichenfolge, die das Dokument angibt, das den Klassenteil des SQLSTATE-Werts in diesem Datensatz definiert. Der Wert ist "ISO 9075" für alle SQLSTATEs, die von open Group und ISO call-level interface definiert sind. Für ODBC-spezifische SQLSTATEs (all diejenigen, deren SQLSTATE-Klasse "IM" lautet), lautet der Wert "ODBC 3.0".
SQL_DIAG_COLUMN_NUMBER SQLINTEGER Wenn das feld SQL_DIAG_ROW_NUMBER eine gültige Zeilennummer in einem Rowset oder einer Reihe von Parametern ist, enthält dieses Feld den Wert, der die Spaltennummer im Resultset oder die Parameternummer in der Gruppe von Parametern darstellt. Ergebnissatzspaltennummern beginnen immer bei 1; Wenn dieser Statusdatensatz auf eine Textmarkenspalte bezieht, kann das Feld null sein. Parameternummern beginnen bei 1. Der Wert SQL_NO_COLUMN_NUMBER, wenn der Statusdatensatz keiner Spaltennummer oder Parameternummer zugeordnet ist. Wenn der Treiber die Spalten- oder Parameternummer, der dieser Datensatz zugeordnet ist, nicht ermitteln kann, weist dieses Feld den Wert SQL_COLUMN_NUMBER_UNKNOWN auf.

Der Inhalt dieses Felds wird nur für Anweisungshandles definiert.
SQL_DIAG_CONNECTION_NAME SQLCHAR * Eine Zeichenfolge, die den Namen der Verbindung angibt, auf die sich der Diagnosedatensatz bezieht. Dieses Feld ist treiberdefiniert. Bei Diagnosedatenstrukturen, die dem Umgebungshandle zugeordnet sind, und für Diagnosen, die sich nicht auf eine Verbindung beziehen, handelt es sich bei diesem Feld um eine leere Zeichenfolge.
SQL_DIAG_MESSAGE_TEXT SQLCHAR * Eine Informationsmeldung zu dem Fehler oder der Warnung. Dieses Feld ist wie in Diagnosenachrichtenbeschrieben formatiert. Es gibt keine maximale Länge für den Diagnosenachrichtentext.
SQL_DIAG_NATIVE SQLINTEGER Ein treiber-/datenquellenspezifischer systemeigener Fehlercode. Wenn kein systemeigener Fehlercode vorhanden ist, gibt der Treiber "0" zurück.
SQL_DIAG_ROW_NUMBER SQLLEN Dieses Feld enthält die Zeilennummer im Rowset oder die Parameternummer in der Gruppe von Parametern, mit denen der Statusdatensatz verknüpft ist. Zeilennummern und Parameternummern beginnen mit 1. Dieses Feld hat den Wert SQL_NO_ROW_NUMBER, wenn dieser Statusdatensatz keiner Zeilennummer oder Parameternummer zugeordnet ist. Wenn der Treiber die Zeilen- oder Parameternummer, der dieser Datensatz zugeordnet ist, nicht ermitteln kann, weist dieses Feld den Wert SQL_ROW_NUMBER_UNKNOWN auf.

Der Inhalt dieses Felds wird nur für Anweisungshandles definiert.
SQL_DIAG_SERVER_NAME SQLCHAR * Eine Zeichenfolge, die den Servernamen angibt, auf den sich der Diagnosedatensatz bezieht. Er entspricht dem Wert, der für einen Aufruf von SQLGetInfo- mit der Option SQL_DATA_SOURCE_NAME zurückgegeben wird. Bei Diagnosedatenstrukturen, die dem Umgebungshandle zugeordnet sind, und für Diagnosen, die sich nicht auf einen Server beziehen, ist dieses Feld eine leere Zeichenfolge.
SQL_DIAG_SQLSTATE SQLCHAR * Ein fünfstelligen SQLSTATE-Diagnosecode. Weitere Informationen finden Sie unter SQLSTATEs.
SQL_DIAG_SUBCLASS_ORIGIN SQLCHAR * Eine Zeichenfolge mit demselben Format und gültigen Werten wie SQL_DIAG_CLASS_ORIGIN, die den definierenden Teil des Unterklassenteils des SQLSTATE-Codes identifiziert. Die ODBC-spezifischen SQLSTATES, für die "ODBC 3.0" zurückgegeben wird, umfassen Folgendes:

01S00, 01S01, 01S02, 01S06, 01S07, 07S01, 08S01, 21S01, 21S02, 25S01, 25S02, 25S03, 42S01, 42S02, 42S11, 42S12, 42S21, 42S22, HY095, HY097, HY098, HY099, HY100, HY101, HY105, HY107, HY109, HY110, HY111, HYT00, HYT01, IM001, IM002, IM003, IM004, IM005, IM006, IM007, IM008, IM010, IM011, IM012.

Werte der Dynamischen Funktionsfelder

In der folgenden Tabelle werden die Werte von SQL_DIAG_DYNAMIC_FUNCTION und SQL_DIAG_DYNAMIC_FUNCTION_CODE beschrieben, die für jeden SQL-Anweisungstyp gelten, der durch einen Aufruf von SQLExecute oder SQLExecDirect-ausgeführt wird. Der Treiber kann den aufgelisteten Werten treiberdefinierte Werte hinzufügen.

SQL-Anweisung

ausgeführt
Wert von

SQL_DIAG_DYNAMIC_FUNCTION
Wert von

SQL_DIAG_DYNAMIC_FUNCTION_CODE
alter-domain-statement "ALTER DOMAIN" SQL_DIAG_ALTER_DOMAIN
Alter-Table-Anweisung "ALTER TABLE" SQL_DIAG_ALTER_TABLE
Assertionsdefinition "CREATE ASSERTION" SQL_DIAG_CREATE_ASSERTION
"ZEICHENSATZ ERSTELLEN" SQL_DIAG_CREATE_CHARACTER_SET
Sortierdefinition "CREATE COLLATION" SQL_DIAG_CREATE_COLLATION
Domänendefinitions- "CREATE DOMAIN" SQL_DIAG_CREATE_DOMAIN
create-index-statement "CREATE INDEX" SQL_DIAG_CREATE_INDEX
create-table-statement "CREATE TABLE" SQL_DIAG_CREATE_TABLE
create-view-statement "CREATE VIEW" SQL_DIAG_CREATE_VIEW
Cursorspezifikation "SELECT CURSOR" SQL_DIAG_SELECT_CURSOR
delete-statement-positioned "DYNAMISCHER LÖSCHCURSOR" SQL_DIAG_DYNAMIC_DELETE_CURSOR
durchsuchte "WO LÖSCHEN" SQL_DIAG_DELETE_WHERE
drop-assertion-anweisung "DROP ASSERTION" SQL_DIAG_DROP_ASSERTION
drop-character-set-stmt "DROP CHARACTER SET" SQL_DIAG_DROP_CHARACTER_SET
Drop-Collation-Anweisung "DROP COLLATION" SQL_DIAG_DROP_COLLATION
drop-domain-statement "DROP DOMAIN" SQL_DIAG_DROP_DOMAIN
drop-index-anweisung "DROP INDEX" SQL_DIAG_DROP_INDEX
drop-schema-statement "DROP SCHEMA" SQL_DIAG_DROP_SCHEMA
drop-table-statement "DROP TABLE" SQL_DIAG_DROP_TABLE
drop-translation-statement "DROP TRANSLATION" SQL_DIAG_DROP_TRANSLATION
Drop-View-Anweisung "DROP VIEW" SQL_DIAG_DROP_VIEW
"GRANT" SQL_DIAG_GRANT
"INSERT" SQL_DIAG_INSERT
ODBC-Prozedurerweiterung "CALL" SQL_DIAG_ ANRUF
revoke-statement "REVOKE" SQL_DIAG_REVOKE
Schemadefinitions- "CREATE SCHEMA" SQL_DIAG_CREATE_SCHEMA
Übersetzungsdefinition "ÜBERSETZUNG ERSTELLEN" SQL_DIAG_CREATE_TRANSLATION
update-statement-positioned "DYNAMISCHER UPDATECURSOR" SQL_DIAG_DYNAMIC_UPDATE_CURSOR
update-statement-searched "WO AKTUALISIEREN" SQL_DIAG_UPDATE_WHERE
Unbekannt leere Zeichenfolge SQL_DIAG_UNKNOWN_STATEMENT

Sequenz von Statusdatensätzen

Statusdatensätze werden basierend auf der Zeilennummer und dem Typ der Diagnose in einer Sequenz positioniert. Der Treiber-Manager bestimmt die endgültige Reihenfolge, in der Statusdatensätze zurückgegeben werden, die generiert werden. Der Treiber bestimmt die endgültige Reihenfolge, in der Statusdatensätze zurückgegeben werden, die generiert werden.

Wenn Diagnosedatensätze sowohl vom Treiber-Manager als auch vom Treiber bereitgestellt werden, ist der Treiber-Manager für die Bestellung verantwortlich.

Wenn zwei oder mehr Statusdatensätze vorhanden sind, wird die Abfolge der Datensätze zuerst anhand der Zeilennummer bestimmt. Die folgenden Regeln gelten für die Ermittlung der Abfolge von Diagnosedatensätzen nach Zeile:

  • Datensätze, die keiner Zeile entsprechen, werden vor Datensätzen angezeigt, die einer bestimmten Zeile entsprechen, da SQL_NO_ROW_NUMBER als -1 definiert ist.

  • Datensätze, für die die Zeilennummer unbekannt ist, werden vor allen anderen Datensätzen angezeigt, da SQL_ROW_NUMBER_UNKNOWN als -2 definiert ist.

  • Für alle Datensätze, die sich auf bestimmte Zeilen beziehen, werden Datensätze nach dem Wert im feld SQL_DIAG_ROW_NUMBER sortiert. Alle Fehler und Warnungen der ersten betroffenen Zeile werden aufgelistet, und dann alle Fehler und Warnungen der nächsten betroffenen Zeile usw.

Anmerkung

Der ODBC 3*.x*-Treiber-Manager sortiert keine Statusdatensätze in der Diagnosewarteschlange, wenn SQLSTATE 01S01 (Fehler in Zeile) von einem ODBC 2*.x*-Treiber zurückgegeben wird oder SQLSTATE 01S01 (Fehler in Zeile) von ein ODBC 3*.x*-Treiber, wenn SQLExtendedFetch- aufgerufen wird oder SQLSetPos- auf einem Cursor aufgerufen wird, der mit SQLExtendedFetch-positioniert wurde.

Innerhalb jeder Zeile oder für alle Datensätze, die keiner Zeile entsprechen oder für die die Zeilennummer unbekannt ist, oder für alle diese Datensätze mit einer Zeilennummer, die SQL_NO_ROW_NUMBER entspricht, wird der erste aufgelistete Datensatz mithilfe einer Reihe von Sortierregeln bestimmt. Nach dem ersten Datensatz ist die Reihenfolge der anderen Datensätze, die sich auf eine Zeile auswirken, nicht definiert. Eine Anwendung kann nicht davon ausgehen, dass Vorwarnungen nach dem ersten Datensatz auftreten. Anwendungen sollten die vollständige Diagnosedatenstruktur überprüfen, um vollständige Informationen zu einem erfolglosen Aufruf einer Funktion zu erhalten.

Die folgenden Regeln werden verwendet, um den ersten Datensatz in einer Zeile zu bestimmen. Der Datensatz mit dem höchsten Rang ist der erste Datensatz. Die Quelle eines Datensatzes (Treiber-Manager, Treiber, Gateway usw.) wird beim Bewerten von Datensätzen nicht berücksichtigt.

  • Fehler Statusdatensätze, die Fehler beschreiben, haben die höchste Rangfolge. Die folgenden Regeln werden auf Sortierfehler angewendet:

    • Datensätze, die auf einen Transaktionsfehler oder einen möglichen Transaktionsfehler hinweisen, haben alle anderen Datensätze überlagert.

    • Wenn zwei oder mehr Datensätze dieselbe Fehlerbedingung beschreiben, haben SQLSTATEs, die von der Open Group CLI-Spezifikation (Klassen 03 bis HZ) definiert sind, ODBC- und treiberdefinierte SQLSTATEs ausrangiert.

  • Implementierungsdefinierte No Data Values Statusdatensätze, die treiberdefinierte Keine Datenwerte (Klasse 02) beschreiben, haben die zweithöchste Rangfolge.

  • Warnungen Statusdatensätze, die Warnungen (Klasse 01) beschreiben, haben die niedrigste Rangfolge. Wenn zwei oder mehr Datensätze dieselbe Warnungsbedingung beschreiben, werden SQLSTATEs, die durch die Open Group CLI-Spezifikation definiert sind, ODBC-definierte und treiberdefinierte SQLSTATEs überschrieben.

Informationen zu Siehe
Abrufen mehrerer Felder einer Diagnosedatenstruktur SQLGetDiagRec-Funktion

Siehe auch

ODBC-API-Referenz
ODBC-Headerdateien