Diagnostyczne rekordy i pola
Diagnostyczne rekordy są skojarzone z ODBC środowiska połączenia, instrukcja, lub uchwyty deskryptora.Po jakiejkolwiek funkcja ODBC wywołuje kod zwrotny, inne niż SQL_SUCCESS lub SQL_INVALID_HANDLE, uchwyt wywołana przez funkcja skojarzył diagnostyczne rekordy, które zawierają informacyjnych lub komunikatów o błędach.Te rekordy są zachowywane aż do innej funkcji jest wywoływana przy użyciu dojścia, jaką czas są ignorowane.Nie jest ograniczona do liczby rekordów diagnostyczne, które można skojarzyć z uchwytu na którymkolwiek czas.
Istnieją dwa typy rekordów diagnostyczne: Nagłówek i stan.Rekord nagłówka jest rekordem 0; w przypadku stanu rekordy są rekordy 1 i nowszy.Diagnostyczne rekordy zawierają różne pola rekordu nagłówka oraz stan rekordów.Składniki ODBC można również definiować własne pola rekordu diagnostycznych.
Pola w rekordzie nagłówka zawierają ogólne informacje o wykonanie funkcja, w tym kod zwrotny, liczba wierszy, liczba rekordów stanu i typ instrukcja wykonywane.Zawsze jest tworzony rekord nagłówka, chyba że funkcja ODBC zwraca SQL_INVALID_HANDLE.Aby uzyskać pełną listę pól w rekordzie nagłówka, zobacz SQLGetDiagField.
Pól w rekordach stan zawierają informacje o określone błędy lub ostrzeżenia zwrócony przez menedżera sterownika ODBC, sterownika lub danych źródło, łącznie z SQLSTATE, numer błędu macierzystym, komunikat diagnostyczny, numer kolumna i numer wiersza.Stan rekordy są tworzone tylko wtedy, gdy funkcja zwraca wartość SQL_ERROR, wartość SQL_SUCCESS_WITH_INFO, SQL_NO_DATA, SQL_NEED_DATA lub SQL_STILL_EXECUTING.Zobacz pełną listę pól w rekordach stanu SQLGetDiagField.
SQLGetDiagRec pobiera jeden rekord diagnostyczne wraz z jego ODBC SQLSTATE, błąd macierzysty numer i komunikat diagnostic pól.This functionality is similar to the ODBC 2.xSQLError function.Najprostszy funkcja obsługi błędów w ODBC 3.x jest wielokrotnie wywołanie SQLGetDiagRec począwszy od RecNumber parametr zestaw 1 i zwiększając RecNumber 1, aż do SQLGetDiagRec zwraca SQL_NO_DATA.Jest to równoważne ODBC 2.x telefonicznej aplikacji SQLError aż zwróci ona SQL_NO_DATA_FOUND.
ODBC 3.x obsługuje informacje diagnostyczne znacznie więcej niż ODBC 2.x.Te informacje są przechowywane w dodatkowych pól diagnostycznych rekordami pobranymi za pomocą SQLGetDiagField.
SQL Server Sterownik ODBC macierzystym klienta ma specyficzne dla sterownika pól diagnostycznych, które mogą być pobierane z SQLGetDiagField.Etykiety dla tych pól specyficzne dla sterownika są zdefiniowane w sqlncli.h.Użyć tych etykiet do pobrania SQL Server Państwo, poziom ważności, nazwa serwera, Nazwa procedury i numer skojarzony z każdego rekordu diagnostycznych.Ponadto sqlncli.h zawiera definicje kodów sterownik używa do identyfikowania instrukcji Transact-SQL, jeśli aplikacja wywołuje SQLGetDiagField z DiagIdentifier zestaw do SQL_DIAG_DYNAMIC_FUNCTION_CODE.
SQLGetDiagField jest przetwarzany przez Menedżera sterowników ODBC za pomocą informacji o błędzie buforuje go od sterownika.Menedżera sterowników ODBC nie buforuje specyficzne dla sterownika pól diagnostycznych aż po ustanowieniu połączenia.SQLGetDiagField zwraca wartość SQL_ERROR, jeśli jest on nazywany uzyskanie pól diagnostycznych specyficzne dla sterownika przed zakończeniem połączenia.Jeśli funkcja połączenia ODBC zwraca wartość SQL_SUCCESS_WITH_INFO, specyficzne dla sterownika pól diagnostycznych dla funkcji połączenia nie są jeszcze dostępne.Można rozpocząć wywoływanie SQLGetDiagField dla pól diagnostycznych specyficzne dla sterownika tylko po wykonaniu innego ODBC po funkcja Połącz wywołania funkcja.
Większość błędów zgłaszanych przez SQL Server sterownik ODBC macierzystym klienta można skutecznie zdiagnozować przy użyciu informacje zwracane przez SQLGetDiagRec.W niektórych przypadkach jednak informacje zwrócone przez pola diagnostyczne specyficzne dla sterownika jest ważne w diagnozowaniu błąd.Podczas obsługi błąd ODBC dla aplikacji przy użyciu kodowania SQL Server sterownik ODBC macierzystym klienta jest warto również użyć SQLGetDiagField do pobierania przynajmniej pól specyficzne dla sterownika SQL_DIAG_SS_MSGSTATE i SQL_DIAG_SS_SEVERITY.Jeśli określony błąd może zostać podniesiony w kilku lokalizacjach w SQL Server Kod, SQL_DIAG_SS_MSGSTATE wskazuje inżynier pomocy technicznej firmy Microsoft, szczególnie gdy błąd podniesiono, które czasami ułatwia diagnozowanie problemu.