Udostępnij za pośrednictwem


SQLGetDiagField, funkcja

zgodności
Wersja wprowadzona: Zgodność ze standardami ODBC 3.0: ISO 92

podsumowania
SQLGetDiagField zwraca bieżącą wartość pola rekordu struktury danych diagnostycznych (skojarzonej z określonym uchwytem), która zawiera informacje o błędzie, ostrzeżeniu i stanie.

Składnia


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

Argumenty

HandleType
[Dane wejściowe] Identyfikator typu dojścia opisujący typ uchwytu, dla którego wymagana jest diagnostyka. Musi być jednym z następujących elementów:

  • SQL_HANDLE_DBC

  • SQL_HANDLE_DBC_INFO_TOKEN

  • SQL_HANDLE_DESC

  • SQL_HANDLE_ENV

  • SQL_HANDLE_STMT

SQL_HANDLE_DBC_INFO_TOKEN dojście jest używane tylko przez Menedżera sterowników i sterownik. Aplikacje nie powinny używać tego typu dojścia. Aby uzyskać więcej informacji na temat SQL_HANDLE_DBC_INFO_TOKEN, zobacz Developing Connection-Pool Awareness in an ODBC Driver(Tworzenie świadomości Connection-Pool sterowników ODBC).

dojścia
[Dane wejściowe] Dojście dla struktury danych diagnostycznych typu wskazanego przez HandleType. Jeśli handletype jest SQL_HANDLE_ENV, może być współużytkowanym lub nieudostępnym dojściem środowiska.

RecNumber
[Dane wejściowe] Wskazuje rekord stanu, z którego aplikacja szuka informacji. Rekordy stanu są numerowane z zakresu 1. Jeśli argument DiagIdentifier wskazuje dowolne pole nagłówka diagnostyki, RecNumber jest ignorowany. Jeśli nie, powinno to być więcej niż 0.

diagIdentifier
[Dane wejściowe] Wskazuje pole diagnostyki, którego wartość ma zostać zwrócona. Aby uzyskać więcej informacji, zobacz sekcję "DiagIdentifier Argument" w sekcji "Komentarze".

DiagInfoPtr
[Dane wyjściowe] Wskaźnik do buforu, w którym mają być zwracane informacje diagnostyczne. Typ danych zależy od wartości DiagIdentifier. Jeśli DiagInfoPtr jest typem całkowitym, aplikacje powinny używać buforu SQLULEN i zainicjować wartość 0 przed wywołaniem tej funkcji, ponieważ niektóre sterowniki mogą zapisywać tylko niższe 32-bitowe lub 16-bitowe buforu i pozostawić bit o wyższej kolejności bez zmian.

Jeśli diagInfoPtr ma wartość NULL, StringLengthPtr nadal zwróci całkowitą liczbę bajtów (z wyłączeniem znaku zakończenia wartości null dla danych znaków) dostępną do zwrócenia w buforze wskazywanym przez DiagInfoPtr.

BufferLength
[Dane wejściowe] Jeśli DiagIdentifier jest diagnostyką zdefiniowaną przez odBC i DiagInfoPtr wskazuje ciąg znaków lub bufor binarny, ten argument powinien być długością *DiagInfoPtr. Jeśli DiagIdentifier jest polem zdefiniowanym przez odBC i *DiagInfoPtr jest liczbą całkowitą, BufferLength jest ignorowana. Jeśli wartość w *DiagInfoPtr jest ciągiem Unicode (podczas wywoływania SQLGetDiagFieldW), argument BufferLength musi być parzystą liczbą.

Jeśli DiagIdentifier jest polem zdefiniowanym przez sterownik, aplikacja wskazuje charakter pola menedżera sterowników, ustawiając argument BufferLength. BufferLength mogą mieć następujące wartości:

  • Jeśli DiagInfoPtr jest wskaźnikiem do ciągu znaków, BufferLength jest długością ciągu lub SQL_NTS.

  • Jeśli DiagInfoPtr jest wskaźnikiem do buforu binarnego, aplikacja umieszcza wynik makra SQL_LEN_BINARY_ATTR(długości) w BufferLength. Spowoduje to umieszczenie wartości ujemnej w BufferLength.

  • Jeśli DiagInfoPtr jest wskaźnikiem wartości innej niż ciąg znaków lub ciąg binarny, BufferLength powinna mieć wartość SQL_IS_POINTER.

  • Jeśli *DiagInfoPtr zawiera typ danych o stałej długości, BufferLength jest SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT lub SQL_IS_USMALLINT, zgodnie z potrzebami.

stringLengthPtr
[Dane wyjściowe] Wskaźnik do buforu, w którym zwraca całkowitą liczbę bajtów (z wyłączeniem liczby bajtów wymaganych do znaku zakończenia wartości null) dostępnych do zwrócenia w *DiagInfoPtr, dla danych znaków. Jeśli liczba dostępnych bajtów do zwrócenia jest większa lub równa BufferLength, tekst w *DiagInfoPtr jest obcinany do BufferLength pomniejszonej o długość znaku zakończenia wartości null.

Zwraca

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE lub SQL_NO_DATA.

Diagnostyka

SQLGetDiagField nie publikuje rekordów diagnostycznych. Używa ona następujących wartości zwracanych w celu raportowania wyniku własnego wykonania:

  • SQL_SUCCESS: funkcja pomyślnie zwróciła informacje diagnostyczne.

  • SQL_SUCCESS_WITH_INFO: *DiagInfoPtr było zbyt małe, aby pomieścić żądane pole diagnostyczne. W związku z tym dane w polu diagnostycznym zostały obcięte. Aby ustalić, czy wystąpił obcinanie, aplikacja musi porównać BufferLength z rzeczywistą liczbą dostępnych bajtów, która jest zapisywana wStringLengthPtr.

  • SQL_INVALID_HANDLE: uchwyt wskazywany przez HandleType i Handle nie był prawidłowym uchwytem.

  • SQL_ERROR: Wystąpił jeden z następujących:

    • argument diagIdentifier nie był jednym z prawidłowych wartości.

    • argumentem diagIdentifier był SQL_DIAG_CURSOR_ROW_COUNT, SQL_DIAG_DYNAMIC_FUNCTION, SQL_DIAG_DYNAMIC_FUNCTION_CODE lub SQL_DIAG_ROW_COUNT, ale Handle nie był uchwytem instrukcji. (Menedżer sterowników zwraca tę diagnostykę).

    • Argument RecNumber był ujemny lub 0, gdy DiagIdentifier wskazał pole z rekordu diagnostycznego. RecNumber jest ignorowany dla pól nagłówka.

    • Żądana wartość to ciąg znaków, a BufferLength był mniejszy niż zero.

    • W przypadku korzystania z powiadomienia asynchronicznego operacja asynchroniczna na dojściu nie została ukończona.

  • SQL_NO_DATA: RecNumber była większa niż liczba rekordów diagnostycznych, które istniały dla dojścia określonego w Handle. Funkcja zwraca również SQL_NO_DATA dla wszystkich dodatnich RecNumber, jeśli nie ma żadnych rekordów diagnostycznych dladojścia .

Komentarze

Aplikacja zazwyczaj wywołuje SQLGetDiagField w celu osiągnięcia jednego z trzech celów:

  1. Aby uzyskać określone informacje o błędzie lub ostrzeżeniu, gdy wywołanie funkcji zwróciło SQL_ERROR lub SQL_SUCCESS_WITH_INFO (lub SQL_NEED_DATA dla funkcji SQLBrowseConnect).

  2. Aby określić liczbę wierszy w źródle danych, które miały wpływ podczas wstawiania, usuwania lub aktualizowania operacji zostały wykonane z wywołaniem SQLExecute, SQLExecDirect, SQLBulkOperationslub SQLSetPos (z pola nagłówka SQL_DIAG_ROW_COUNT) lub określić liczbę wierszy, które istnieją w bieżącym otwartym kursorze, jeśli sterownik może podać te informacje (z pola nagłówka SQL_DIAG_CURSOR_ROW_COUNT).

  3. Aby określić, która funkcja została wykonana przez wywołanie SQLExecDirect lub SQLExecute (z pól nagłówka SQL_DIAG_DYNAMIC_FUNCTION i SQL_DIAG_DYNAMIC_FUNCTION_CODE).

Każda funkcja ODBC może publikować zero lub więcej rekordów diagnostycznych za każdym razem, gdy jest wywoływana, więc aplikacja może wywołać SQLGetDiagField po każdym wywołaniu funkcji ODBC. Nie ma limitu liczby rekordów diagnostycznych, które mogą być przechowywane w dowolnym momencie. SQLGetDiagField pobiera tylko informacje diagnostyczne ostatnio skojarzone ze strukturą danych diagnostycznych określoną w argumencie Handle. Jeśli aplikacja wywołuje funkcję ODBC inną niż SQLGetDiagField lub SQLGetDiagRec, wszelkie informacje diagnostyczne z poprzedniego wywołania z tym samym dojściem zostaną utracone.

Aplikacja może skanować wszystkie rekordy diagnostyczne, zwiększając RecNumber, o ile sqlGetDiagField zwraca SQL_SUCCESS. Liczba rekordów stanu jest wskazana w polu nagłówka SQL_DIAG_NUMBER. Wywołania SQLGetDiagField nie są destruktywne w polach nagłówka i rekordu. Aplikacja może wywołać SQLGetDiagField ponownie później, aby pobrać pole z rekordu, o ile funkcja inna niż funkcje diagnostyczne nie została wywołana w międzyczasie, co spowoduje opublikowanie rekordów w tym samym dojściu.

Aplikacja może wywołać SQLGetDiagField, aby zwrócić dowolne pole diagnostyczne w dowolnym momencie, z wyjątkiem SQL_DIAG_CURSOR_ROW_COUNT lub SQL_DIAG_ROW_COUNT, co zwróci SQL_ERROR, jeśli Handle nie jest uchwytem instrukcji. Jeśli jakiekolwiek inne pole diagnostyczne jest niezdefiniowane, wywołanie metody SQLGetDiagField zwróci SQL_SUCCESS (pod warunkiem, że nie zostanie napotkana żadna inna diagnostyka), a dla pola zostanie zwrócona niezdefiniowana wartość.

Aby uzyskać więcej informacji, zobacz Using SQLGetDiagRec and SQLGetDiagField and Implementowanie obiektów SQLGetDiagRec i SQLGetDiagField.

Wywołanie interfejsu API innego niż wykonywane asynchronicznie spowoduje wygenerowanie hy010 "Błąd sekwencji funkcji". Nie można jednak pobrać rekordu błędu przed ukończeniem operacji asynchronicznej.

HandleType, argument

Każdy typ uchwytu może mieć skojarzone z nim informacje diagnostyczne. Argument HandleType wskazuje typ uchwytu Handle.

Niektórych pól nagłówka i rekordu nie można zwracać dla obsługi środowiska, połączenia, instrukcji i deskryptora. Te dojścia, dla których pole nie ma zastosowania, są wskazywane w poniższych sekcjach "Pola nagłówka" i "Pola rekordu".

Jeśli jest SQL_HANDLE_ENV, może być współużytkowanym lub nieudostępnym środowiskiem.

Żadne pola diagnostyczne nagłówka specyficznego dla sterownika nie powinny być skojarzone z dojściem środowiska.

Jedynymi polami nagłówka diagnostyki zdefiniowanymi dla uchwytu deskryptora są SQL_DIAG_NUMBER i SQL_DIAG_RETURNCODE.

DiagIdentifier Argument

Ten argument wskazuje identyfikator pola wymaganego ze struktury danych diagnostycznych. Jeśli RecNumber jest większa lub równa 1, dane w polu opisują informacje diagnostyczne zwracane przez funkcję. Jeśli RecNumber wynosi 0, pole znajduje się w nagłówku struktury danych diagnostycznych i dlatego zawiera dane dotyczące wywołania funkcji, które zwróciły informacje diagnostyczne, a nie do określonych informacji.

Sterowniki mogą definiować pola nagłówka i rekordu specyficzne dla sterownika w strukturze danych diagnostycznych.

Aplikacja ODBC 3*.x* pracująca ze sterownikiem ODBC 2*.x* będzie mogła wywołać SQLGetDiagField tylko z argumentem SQL_DIAG_CLASS_ORIGIN DiagIdentifier, 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, lub SQL_DIAG_SQLSTATE. Wszystkie inne pola diagnostyczne będą zwracać SQL_ERROR.

Pola nagłówka

Pola nagłówka wymienione w poniższej tabeli można uwzględnić w argumencie DiagIdentifier.

DiagIdentifier Zwracany typ Zwraca
SQL_DIAG_CURSOR_ROW_COUNT SQLLEN To pole zawiera liczbę wierszy w kursorze. Jego semantyka zależy od typów informacji SQLGetInfo SQL_DYNAMIC_CURSOR_ATTRIBUTES2, SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2, SQL_KEYSET_CURSOR_ATTRIBUTES2 i SQL_STATIC_CURSOR_ATTRIBUTES2, które wskazują, które liczby wierszy są dostępne dla każdego typu kursora (w SQL_CA2_CRC_EXACT i bitach SQL_CA2_CRC_APPROXIMATE).

Zawartość tego pola jest zdefiniowana tylko dla dojść instrukcji i dopiero po wywołaniu SQLExecute, SQLExecDirectlub SQLMoreResults. Wywołanie SQLGetDiagField za pomocą DiagIdentifier SQL_DIAG_CURSOR_ROW_COUNT na innym niż dojście instrukcji zwróci SQL_ERROR.
SQL_DIAG_DYNAMIC_FUNCTION SQLCHAR * Jest to ciąg opisujący instrukcję SQL wykonywaną przez funkcję bazową. (Zobacz "Wartości pól funkcji dynamicznej", w dalszej części tej sekcji, aby zapoznać się z określonymi wartościami). Zawartość tego pola jest zdefiniowana tylko dla obsługi instrukcji i tylko po wywołaniu SQLExecute, SQLExecDirectlub SQLMoreResults. Wywołanie SQLGetDiagField za pomocą DiagIdentifier SQL_DIAG_DYNAMIC_FUNCTION na innym niż dojście instrukcji zwróci SQL_ERROR. Wartość tego pola jest niezdefiniowana przed wywołaniem polecenia SQLExecute lub SQLExecDirect.
SQL_DIAG_DYNAMIC_FUNCTION_CODE SQLINTEGER Jest to kod liczbowy opisujący instrukcję SQL, która została wykonana przez funkcję bazową. (Zobacz "Wartości pól funkcji dynamicznej", w dalszej części tej sekcji, aby uzyskać określoną wartość). Zawartość tego pola jest zdefiniowana tylko dla obsługi instrukcji i tylko po wywołaniu SQLExecute, SQLExecDirectlub SQLMoreResults. Wywołanie SQLGetDiagField za pomocą DiagIdentifier SQL_DIAG_DYNAMIC_FUNCTION_CODE innej niż dojście instrukcji zwróci SQL_ERROR. Wartość tego pola jest niezdefiniowana przed wywołaniem polecenia SQLExecute lub SQLExecDirect.
SQL_DIAG_NUMBER SQLINTEGER Liczba rekordów stanu dostępnych dla określonego dojścia.
SQL_DIAG_RETURNCODE SQLRETURN Zwraca kod zwrócony przez funkcję. Aby uzyskać listę kodów powrotnych, zobacz kody powrotne. Sterownik nie musi implementować SQL_DIAG_RETURNCODE; jest on zawsze implementowany przez Menedżera sterowników. Jeśli żadna funkcja nie została jeszcze wywołana wDojście, SQL_SUCCESS zostanie zwrócona dla SQL_DIAG_RETURNCODE.
SQL_DIAG_ROW_COUNT SQLLEN Liczba wierszy, których dotyczy wstawianie, usuwanie lub aktualizacja wykonywana przez SQLExecute, SQLExecDirect, SQLBulkOperationslub SQLSetPos. Jest on definiowany przez sterownik po wykonaniu specyfikacji kursora . Zawartość tego pola jest zdefiniowana tylko dla dojść instrukcji. Wywołanie SQLGetDiagField za pomocą DiagIdentifier SQL_DIAG_ROW_COUNT na innym niż dojście instrukcji zwróci SQL_ERROR. Dane w tym polu są również zwracane w RowCountPtr argumentu SQLRowCount. Dane w tym polu są resetowane po każdym niediagnostycznym wywołaniu funkcji, natomiast liczba wierszy zwrócona przez SQLRowCount pozostaje taka sama, dopóki instrukcja nie zostanie ustawiona na stan przygotowany lub przydzielony.

Pola rekordów

Pola rekordów wymienione w poniższej tabeli można uwzględnić w argumencie DiagIdentifier.

DiagIdentifier Zwracany typ Zwraca
SQL_DIAG_CLASS_ORIGIN SQLCHAR * Ciąg wskazujący dokument, który definiuje część klasy wartości SQLSTATE w tym rekordzie. Jego wartość to "ISO 9075" dla wszystkich atrybutów SQLSTATEs zdefiniowanych przez interfejs Open Group i ISO na poziomie wywołań. W przypadku obiektów SQLSTATEs specyficznych dla odBC (wszystkie te, których klasa SQLSTATE to "IM"), jej wartość to "ODBC 3.0".
SQL_DIAG_COLUMN_NUMBER SQLINTEGER Jeśli pole SQL_DIAG_ROW_NUMBER jest prawidłową liczbą wierszy w zestawie wierszy lub zestawem parametrów, to pole zawiera wartość reprezentującą numer kolumny w zestawie wyników lub numer parametru w zestawie parametrów. Numery kolumn zestawu wyników zawsze zaczynają się od 1; jeśli ten rekord stanu odnosi się do kolumny zakładki, pole może być zerowe. Numery parametrów zaczynają się od 1. Ma wartość SQL_NO_COLUMN_NUMBER, jeśli rekord stanu nie jest skojarzony z numerem kolumny lub numerem parametru. Jeśli sterownik nie może określić numeru kolumny lub numeru parametru skojarzonego z tym rekordem, to pole ma wartość SQL_COLUMN_NUMBER_UNKNOWN.

Zawartość tego pola jest zdefiniowana tylko dla dojść instrukcji.
SQL_DIAG_CONNECTION_NAME SQLCHAR * Parametry wskazujące nazwę połączenia, do którego odnosi się rekord diagnostyczny. To pole jest zdefiniowane przez sterownik. W przypadku struktur danych diagnostycznych skojarzonych z dojściem środowiska i diagnostyki, które nie odnoszą się do żadnego połączenia, to pole jest ciągiem o zerowej długości.
SQL_DIAG_MESSAGE_TEXT SQLCHAR * Komunikat informacyjny o błędzie lub ostrzeżeniu. To pole jest sformatowane zgodnie z opisem w komunikaty diagnostyczne. Tekst komunikatu diagnostycznego nie ma maksymalnej długości.
SQL_DIAG_NATIVE SQLINTEGER Kod błędu natywnego specyficznego dla sterownika/źródła danych. Jeśli nie ma natywnego kodu błędu, sterownik zwraca wartość 0.
SQL_DIAG_ROW_NUMBER SQLLEN To pole zawiera numer wiersza w zestawie wierszy lub numer parametru w zestawie parametrów, z którym jest skojarzony rekord stanu. Numery wierszy i numery parametrów zaczynają się od 1. To pole ma wartość SQL_NO_ROW_NUMBER, jeśli ten rekord stanu nie jest skojarzony z numerem wiersza lub numerem parametru. Jeśli sterownik nie może określić numeru wiersza lub numeru parametru skojarzonego z tym rekordem, to pole ma wartość SQL_ROW_NUMBER_UNKNOWN.

Zawartość tego pola jest zdefiniowana tylko dla dojść instrukcji.
SQL_DIAG_SERVER_NAME SQLCHAR * Ciąg wskazujący nazwę serwera, z którą odnosi się rekord diagnostyczny. Jest taka sama jak wartość zwrócona dla wywołania polecenia SQLGetInfo z opcją SQL_DATA_SOURCE_NAME. W przypadku struktur danych diagnostycznych skojarzonych z dojściem środowiska i diagnostyki, które nie odnoszą się do żadnego serwera, to pole jest ciągiem o zerowej długości.
SQL_DIAG_SQLSTATE SQLCHAR * Pięcioznaczny kod diagnostyczny SQLSTATE. Aby uzyskać więcej informacji, zobacz SQLSTATEs.
SQL_DIAG_SUBCLASS_ORIGIN SQLCHAR * Ciąg o tym samym formacie i prawidłowych wartościach co SQL_DIAG_CLASS_ORIGIN, który identyfikuje część definiującą część podklasy kodu SQLSTATE. Zwracany jest kod SQLSTATES specyficzny dla odBC 3.0:

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

Wartości pól funkcji dynamicznej

W poniższej tabeli opisano wartości SQL_DIAG_DYNAMIC_FUNCTION i SQL_DIAG_DYNAMIC_FUNCTION_CODE, które mają zastosowanie do każdego typu instrukcji SQL wykonywanej przez wywołanie SQLExecute lub SQLExecDirect. Sterownik może dodawać wartości zdefiniowane przez sterownik do tych wymienionych.

Instrukcja SQL

Wykonywane
Wartość

SQL_DIAG_DYNAMIC_FUNCTION
Wartość

SQL_DIAG_DYNAMIC_FUNCTION_CODE
alter-domain-statement "ALTER DOMAIN" SQL_DIAG_ALTER_DOMAIN
alter-table-statement "ALTER TABLE" SQL_DIAG_ALTER_TABLE
definicji asercji "CREATE ASSERTION" (TWORZENIE ASERCJI) SQL_DIAG_CREATE_ASSERTION
definicji zestawu znaków "CREATE CHARACTER SET" (TWORZENIE ZESTAWU ZNAKÓW) SQL_DIAG_CREATE_CHARACTER_SET
sortowania "TWORZENIE SORTOWANIA" SQL_DIAG_CREATE_COLLATION
definicji domeny "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
specyfikacji kursora "SELECT CURSOR" (WYBIERANIE KURSORA) SQL_DIAG_SELECT_CURSOR
usuniętych instrukcji "DYNAMICZNE USUWANIE KURSORA" SQL_DIAG_DYNAMIC_DELETE_CURSOR
przeszukiwane instrukcje usuwania "USUŃ GDZIE" SQL_DIAG_DELETE_WHERE
instrukcji drop-assertion-statement "DROP ASSERTION" SQL_DIAG_DROP_ASSERTION
drop-character-set-stmt "UPUŚĆ ZESTAW ZNAKÓW" SQL_DIAG_DROP_CHARACTER_SET
instrukcji sortowania drop-collation- "UPUŚĆ SORTOWANIE" SQL_DIAG_DROP_COLLATION
instrukcji drop-domain-statement "DROP DOMAIN" SQL_DIAG_DROP_DOMAIN
instrukcji drop-index-statement "DROP INDEX" SQL_DIAG_DROP_INDEX
instrukcji drop-schema-statement "DROP SCHEMA" SQL_DIAG_DROP_SCHEMA
instrukcji drop-table-statement "DROP TABLE" SQL_DIAG_DROP_TABLE
instrukcji drop-translation-statement "DROP TRANSLATION" SQL_DIAG_DROP_TRANSLATION
instrukcji drop-view-statement "DROP VIEW" SQL_DIAG_DROP_VIEW
grantstatement "GRANT" SQL_DIAG_GRANT
instrukcji insert-statement "INSERT" SQL_DIAG_INSERT
rozszerzenia procedury ODBC "CALL" połączenie SQL_DIAG_
odwołania instrukcji "ODWOŁAJ" SQL_DIAG_REVOKE
definicji schematu "CREATE SCHEMA" (TWORZENIE SCHEMATU) SQL_DIAG_CREATE_SCHEMA
definicji tłumaczenia "CREATE TRANSLATION" (TWORZENIE TŁUMACZENIA) SQL_DIAG_CREATE_TRANSLATION
z pozycją update-statement "KURSOR AKTUALIZACJI DYNAMICZNEJ" SQL_DIAG_DYNAMIC_UPDATE_CURSOR
przeszukiwane instrukcje aktualizacji "AKTUALIZUJ MIEJSCE" SQL_DIAG_UPDATE_WHERE
Nieznany pusty ciąg SQL_DIAG_UNKNOWN_STATEMENT

Sekwencja rekordów stanu

Rekordy stanu są umieszczone w sekwencji na podstawie numeru wiersza i typu diagnostyki. Menedżer sterowników określa ostateczną kolejność zwracania rekordów stanu, które generuje. Sterownik określa ostateczną kolejność zwracania rekordów stanu, które generuje.

Jeśli rekordy diagnostyczne są publikowane zarówno przez Menedżera sterowników, jak i sterownik, menedżer sterowników jest odpowiedzialny za ich zamawianie.

Jeśli istnieją co najmniej dwa rekordy stanu, sekwencja rekordów jest określana najpierw według numeru wiersza. Następujące reguły dotyczą określania sekwencji rekordów diagnostycznych według wiersza:

  • Rekordy, które nie odpowiadają żadnemu wierszowi, są wyświetlane przed rekordami, które odpowiadają określonemu wierszowi, ponieważ SQL_NO_ROW_NUMBER jest definiowana jako -1.

  • Rekordy, dla których numer wiersza jest nieznany, są wyświetlane przed wszystkimi innymi rekordami, ponieważ SQL_ROW_NUMBER_UNKNOWN jest zdefiniowana jako -2.

  • Dla wszystkich rekordów odnoszących się do określonych wierszy rekordy są sortowane według wartości w polu SQL_DIAG_ROW_NUMBER. Zostaną wyświetlone wszystkie błędy i ostrzeżenia dotyczące pierwszego wiersza, a następnie wszystkie błędy i ostrzeżenia dotyczące następnego wiersza itd.

Nuta

Menedżer sterowników ODBC 3*.x* nie porządkuje rekordów stanu w kolejce diagnostycznej, jeśli funkcja SQLSTATE 01S01 (błąd w wierszu) jest zwracana przez sterownik ODBC 2*.x* lub jeśli zwracany jest błąd SQLSTATE 01S01 (błąd w wierszu) Sterownik ODBC 3*.x* po wywołaniu SQLExtendedFetch lub sqlSetPos jest wywoływany na kursorze umieszczonym z SQLExtendedFetch.

W każdym wierszu lub dla wszystkich tych rekordów, które nie odpowiadają wierszowi lub dla którego numer wiersza jest nieznany, lub dla wszystkich tych rekordów o liczbie wierszy równej SQL_NO_ROW_NUMBER pierwszy wymieniony rekord jest określany przy użyciu zestawu reguł sortowania. Po pierwszym rekordzie kolejność innych rekordów wpływających na wiersz jest niezdefiniowana. Aplikacja nie może założyć, że błędy poprzedzają ostrzeżenia po pierwszym rekordzie. Aplikacje powinny skanować pełną strukturę danych diagnostycznych, aby uzyskać pełne informacje o nieudanym wywołaniu funkcji.

Poniższe reguły służą do określania pierwszego rekordu w wierszu. Rekord o najwyższej rangi jest pierwszym rekordem. Źródło rekordu (Menedżer sterowników, sterownik, brama itd.) nie jest brane pod uwagę podczas klasyfikowania rekordów.

  • Błędy rekordy stanu opisujące błędy mają najwyższą rangę. Następujące reguły są stosowane do błędów sortowania:

    • Rekordy wskazujące niepowodzenie transakcji lub możliwe niepowodzenie transakcji przechyliły wszystkie inne rekordy.

    • Jeśli co najmniej dwa rekordy opisują ten sam warunek błędu, parametry SQLSTATE zdefiniowane przez specyfikację interfejsu wiersza polecenia grupy otwierania (klasy od 03 do HZ) przewyższają odBC i zdefiniowane przez sterownik wartości SQLSTATEs.

  • zdefiniowane przez implementację brak wartości danych rekordy stanu, które opisują zdefiniowane przez sterownik wartości brak danych (klasa 02) mają drugą najwyższą rangę.

  • Ostrzeżenia rekordy stanu opisujące ostrzeżenia (klasa 01) mają najniższą rangę. Jeśli co najmniej dwa rekordy opisują ten sam warunek ostrzegawczy SQLSTATEs zdefiniowany przez specyfikację interfejsu wiersza polecenia grupy openrank zdefiniowane przez ODBC i zdefiniowane sterowniki SQLSTATEs.

Aby uzyskać informacje o Widzieć
Uzyskiwanie wielu pól struktury danych diagnostycznych funkcji SQLGetDiagRec

Zobacz też

dokumentacja interfejsu API ODBC
plików nagłówków ODBC