Obsługa błędów i komunikatów w aplikacji

Błędy wywoływane przez SQL Server Database Engine lub instrukcja RAISERROR nie są uwzględniane zestaw wyników. Błędy są zwracane do aplikacji przez mechanizm obsługi błędów, który jest odseparowany od przetwarzania zestawów wyników.

Każda baza danych interfejs programowania aplikacji (API) ma zestaw funkcji, interfejsy, metody, obiekty lub struktur, przez które zwracały błędów i komunikatów.Każdej funkcja interfejsu API lub metoda zazwyczaj zwraca kod stanu wskazujący tej operacji.Jeżeli stan jest inny niż sukces, aplikacja może wywołać funkcji błędu, metody lub obiekty, aby pobrać informacje o błędach.

The Database Engine can return information to the caller in one of two ways:

  1. Błędy

    • Błędy z sys.messages z wskaźnik ważności, 11 lub wyższym.

    • Instrukcja RAISERROR, każdy z wskaźnik ważności, 11 lub wyższym.

  2. Wiadomości

    • Dane wyjściowe instrukcja PRINT.

    • Dane wyjściowe kilku instrukcji DBCC.

    • Błędy z sys.messages z wskaźnik ważności dla 10 lub niższym.

    • Wszelkie instrukcja RAISERROR z ważności 10 lub niższym.

Aplikacje korzystające z interfejsów API, takie jak obiektów ActiveX Data Objects (ADO) i OLE DB na ogół nie odróżnia błędów i komunikatów.W aplikacji Open Database Connectivity (ODBC) wiadomości generują SQL_SUCCESS_WITH_INFO kod zwrotny funkcja i błędy zwykle generuje kod zwrotny SQL_ERROR.Różnica jest najbardziej wyraźny w bibliotece DB, w których błędy mają być zwracane do aplikacji funkcja narzędzia obsługi błędów i komunikaty są zwracane do aplikacji funkcja obsługi wiadomości.Podobnie w przypadku korzystania z dostawca Klient SQL, błędy powodują wyjątek; wyjątku SqlException wiadomości nie należy zmieniać przepływ sterowania i mogą zostać przechwycone przez kod aplikacji rejestrując wywołania zwrotnego dla programu obsługa zdarzeń InfoMessage.

Inne składniki można również podnieść błędów:

  • OLE DB dla SQL Server Dostawca i SQL Server Sterownik ODBC podnieść błędy swoich własnych. Format tych błędów jest zgodne z formatami, zdefiniowany w specyfikacji interfejsu API.

  • Biblioteki sieciowej podnieść błędy swoich własnych.

  • API procedura przechowywana Extended zgłasza błędy we własnym formacie.

  • The SQL Server wizards, applications, and utilities such as, the SQL Server Management Studio and the sqlcmd utility, can raise their own errors.

Błędy z tych składników są zwracane do aplikacji wywołującej przy użyciu tego samego mechanizmu podstawowe jako błędy z Database Engine. Aplikacja może przetwarzać te błędy, przy użyciu tej samej logiki obsługi błędów, ponieważ będzie używany dla Database Engine błędy. Ponieważ te błędy są wywoływane poza Database Engine, nie mogą być one przetwarzane w Transact-SQL Konstruuje TRY…CATCH. Aby uzyskać więcej informacji zobacz... TRY CATCH (języka Transact-SQL).

ODBC obsługa błędów

Specyfikacja ODBC wprowadzone błąd modelu, który zawiera udostępniane jako podstawy modeli błąd rodzajowy interfejsów API, takie jak obiekty ADO i OLE DB, bazy danych i interfejsów API zbudowany za pośrednictwem ODBC — RDO Data Access Object (DAO), Microsoft Podstawa Classes (MFC) klasy bazy danych. Dotyczy to także SQL Server Macierzysty sterownik ODBC klient. W modelu ODBC błędy mają następujące atrybuty:

  • SQLSTATE

    SQLSTATE jest kodem błędu 5 znakowy pierwotnie zdefiniowane w specyfikacji ODBC.Kody SQLSTATE są wspólne dla wszystkich sterowników ODBC i umożliwić aplikacjom kod podstawowy obsługa błędów bez badania dla wszystkich kodów różnych błędów zwracanych przez różnych baz danych.SQLSTATE ODBC nie ma nic zrobić z atrybut stanu Database Engine komunikaty o błędach.

    ODBC 2. x zwraca jeden zestaw kodów SQLSTATE i ODBC 3.x zwraca zestaw kodów SQLSTATE wyrównane Otwórz zarządzanie danych grupy: Strukturalna SQL (Query Language), w wersja 2 standardowych. Ponieważ wszystkie sterowniki ODBC zwrócić ten sam zestaw kodów SQLSTATE, aplikacje oparcie ich obsługi w SQLSTATE kody błędów są bardziej poręczny.

  • Numer błąd macierzysty

    Liczba błąd macierzysty jest numer błędu z podstawowej bazy danych.Aplikacje ODBC odbierać Database Engine Błąd liczby jako liczby błąd macierzysty.

  • Ciąg komunikatu o błędzie

    Komunikat o błędzie jest zwracany w parametr ciąg komunikat o błędzie.

Gdy jest funkcja ODBC zwraca jest stan inny niż SQL_SUCCESS, aplikacja może wywołać SQLGetDiagRec , aby uzyskać informacje o błędach.Na przykład, jeśli aplikacji ODBC (błąd do składniSQL Server numer błędu 170), SQLGetDiagRec zwraca następujące czynności.

szSqlState = 42000, pfNative = 170
szErrorMsg =
'[Microsoft][ODBC SQL Server Driver][SQL Server]
                                     Line 1: Incorrect syntax near *'

ODBC SQLGetDiagField funkcja umożliwia sterowniki ODBC określić pola diagnostyczne specyficzne dla sterownika w diagnostyczne rekordów zwracanych przez sterownik.The SQL Server ODBC driver specifies driver-specific fields to hold Database Engine error information, such as the Database Engine severity and state codes.

Aby uzyskać więcej informacji na temat pobierania komunikaty o błędach w aplikacji ODBC zobacz Obsługa błędów i komunikatów.

Obiekty ADO obsługa błędów

Obiekty ADO korzysta z błędów obiektów i kolekcja errors zwraca błąd standardowy informacje, takie jak SQLSTATE, błąd macierzysty numer i ciąg komunikatu o błędzie.Są to tak samo, jak ich odpowiedniki ODBC.Obiekty ADO nie obsługuje żadnych interfejsów o specyficznym dla dostawca; Database Engine-Błąd określone informacje, takie jak wskaźnik ważności lub stanu, nie jest dostępne dla aplikacji obiektów ADO.

Aby uzyskać więcej informacji na temat pobierania komunikaty o błędach w aplikacji obiektów ADO zobacz Obsługa błędów i komunikatów.

obsługa błędów DB OLE

OLE DB używa IErrorInfo interfejs zwraca błąd standardowy informacje, takie jak SQLSTATE, numer błędu macierzystych i ciąg błędu.Są to tak samo, jak ich odpowiedniki ODBC.Dostawca OLE DB dla SQL Server definiuje ISQLServerErrorInfo Interfejs zwrócićDatabase Engine— szczegółowe informacje, takie jak wskaźnik ważności, stan, nazwę i numer wiersza.

Aby uzyskać więcej informacji na temat pobierania komunikaty o błędach w aplikacjach baz danych OLE zobacz Błędy.

obsługa błędów Klient SQL

Klient SQL dostawca zarządzanych zgłasza wyjątek SqlException podczas nieobsługiwany błąd jest wywoływane przez SQL Server Database Engine. Za pomocą klasy SqlException aplikacje mogą pobierać informacje o błędach wyprodukowanych po stronie serwera, łącznie z numerem błędu, komunikat o błędzie, wagę błędu i inne informacje kontekstu wyjątku.

Do przetwarzania ostrzeżenia lub komunikaty informacyjne, które są wysyłane przez SQL Server Database Engine, aplikacje mogą tworzyć SqlInfoMessageEventHandler pełnomocnika, który nasłuchuje zdarzeń InfoMessage w klasie SqlConnection. Podobnie jak przypadek wyjątku, komunikat kontekstu takie informacje, jak wskaźnik ważności i stanu są przekazywane jako argumenty do wywołania zwrotnego.