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 wHandle. Funkcja zwraca również SQL_NO_DATA dla wszystkich dodatnichRecNumber , 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:
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).
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).
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.
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
Ż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ć
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 w |
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 |
|
"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.
Powiązane funkcje
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