SqlException Klasa

Definicja

Wyjątek zgłaszany podczas SQL Server zwraca ostrzeżenie lub błąd. Klasa ta nie może być dziedziczona.

public ref class SqlException sealed : SystemException
public ref class SqlException sealed : System::Data::Common::DbException
[System.Serializable]
public sealed class SqlException : SystemException
[System.Serializable]
public sealed class SqlException : System.Data.Common.DbException
[<System.Serializable>]
type SqlException = class
    inherit SystemException
[<System.Serializable>]
type SqlException = class
    inherit DbException
Public NotInheritable Class SqlException
Inherits SystemException
Public NotInheritable Class SqlException
Inherits DbException
Dziedziczenie
Dziedziczenie
Atrybuty

Przykłady

Poniższy przykład generuje element , SqlException a następnie wyświetla wyjątek.

public static void ShowSqlException(string connectionString)
{
    string queryString = "EXECUTE NonExistantStoredProcedure";
    StringBuilder errorMessages = new StringBuilder();

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlCommand command = new SqlCommand(queryString, connection);
        try
        {
            command.Connection.Open();
            command.ExecuteNonQuery();
        }
        catch (SqlException ex)
        {
            for (int i = 0; i < ex.Errors.Count; i++)
            {
                errorMessages.Append("Index #" + i + "\n" +
                    "Message: " + ex.Errors[i].Message + "\n" +
                    "LineNumber: " + ex.Errors[i].LineNumber + "\n" +
                    "Source: " + ex.Errors[i].Source + "\n" +
                    "Procedure: " + ex.Errors[i].Procedure + "\n");
            }
            Console.WriteLine(errorMessages.ToString());
        }
    }
}
Public Sub ShowSqlException(ByVal connectionString As String)
    Dim queryString As String = "EXECUTE NonExistantStoredProcedure"
    Dim errorMessages As New StringBuilder()

    Using connection As New SqlConnection(connectionString)
        Dim command As New SqlCommand(queryString, connection)

        Try
            command.Connection.Open()
            command.ExecuteNonQuery()

        Catch ex As SqlException
            Dim i As Integer
            For i = 0 To ex.Errors.Count - 1
                errorMessages.Append("Index #" & i.ToString() & ControlChars.NewLine _
                    & "Message: " & ex.Errors(i).Message & ControlChars.NewLine _
                    & "LineNumber: " & ex.Errors(i).LineNumber & ControlChars.NewLine _
                    & "Source: " & ex.Errors(i).Source & ControlChars.NewLine _
                    & "Procedure: " & ex.Errors(i).Procedure & ControlChars.NewLine)
            Next i
            Console.WriteLine(errorMessages.ToString())
        End Try
    End Using
End Sub

Uwagi

Ta klasa jest tworzona za każdym razem, gdy .NET Framework Dostawca danych dla SQL Server napotka błąd wygenerowany na serwerze. (Błędy po stronie klienta są zgłaszane jako standardowe wyjątki środowiska uruchomieniowego języka wspólnego). SqlException zawsze zawiera co najmniej jedno wystąpienie klasy SqlError.

Komunikaty, które mają poziom ważności 10 lub mniej, są informacyjne i wskazują problemy spowodowane błędami w informacjach, które wprowadził użytkownik. Poziomy ważności od 11 do 16 są generowane przez użytkownika i mogą być poprawiane przez użytkownika. Poziomy ważności od 17 do 25 wskazują błędy oprogramowania lub sprzętu. Gdy wystąpi błąd poziomu 17, 18 lub 19, możesz kontynuować pracę, chociaż może nie być w stanie wykonać określonej instrukcji.

Pozostaje SqlConnection otwarty, gdy poziom ważności wynosi 19 lub mniej. Gdy poziom ważności wynosi 20 lub więcej, serwer zwykle zamyka SqlConnectionwartość . Użytkownik może jednak ponownie otworzyć połączenie i kontynuować. W obu przypadkach SqlException element jest generowany przez metodę wykonującą polecenie .

Aby uzyskać informacje o komunikatach ostrzegawczych i informacyjnych wysyłanych przez SQL Server, zobacz Database Engine Zdarzenia i błędy. Klasa SqlException jest mapowania na ważność SQL Server.

Poniżej przedstawiono ogólne informacje dotyczące obsługi wyjątków. Kod powinien przechwytywać wyjątki, aby zapobiec awarii aplikacji i umożliwić użytkownikowi wyświetlenie odpowiedniego komunikatu o błędzie. Możesz użyć transakcji bazy danych, aby upewnić się, że dane są spójne niezależnie od tego, co się dzieje w aplikacji klienckiej (w tym awarii). Funkcje takie jak System.Transaction.TransactionScope lub Metoda BeginTransaction (w system.Data.OleDb.OleDbConnection, System.Data.ODBC.ODBCConnection i System.Data.SqlClient.SqlConnection) zapewniają spójne dane niezależnie od wyjątków zgłoszonych przez dostawcę. Transakcje mogą zakończyć się niepowodzeniem, więc przechwyć błędy i ponów próbę transakcji.

Należy pamiętać, że począwszy od .NET Framework 4.5, SqlException może zwrócić wewnętrzny Win32Exception.

Klasa wyjątków dostawcy danych platformy .NET Framework zgłasza błędy specyficzne dla dostawcy. Na przykład System.Data.Odbc ma wartość OdbcException, System.Data.OleDb ma obiekt OleDbException, a element System.Data.SqlClient ma wartość SqlException. Aby uzyskać najlepszy poziom szczegółów błędu, przechwyć te wyjątki i użyj elementów członkowskich tych klas wyjątków, aby uzyskać szczegółowe informacje o błędzie.

Oprócz błędów specyficznych dla dostawcy typy dostawców danych platformy .NET Framework mogą zgłaszać wyjątki .NET Framework, takie jak System.OutOfMemoryException i System.Threading.ThreadAbortException. Odzyskiwanie z tych wyjątków może nie być możliwe.

Nieprawidłowe dane wejściowe mogą spowodować, że typ dostawcy danych platformy .NET Framework zgłosi wyjątek, taki jak System.ArgumentException lub System.IndexOutOfRangeException. Wywołanie metody w niewłaściwym czasie może wywołać wyjątek System.InvalidOperationException.

Ogólnie rzecz biorąc, napisz procedurę obsługi wyjątków, która przechwytuje wszelkie wyjątki specyficzne dla dostawcy, a także wyjątki od środowiska uruchomieniowego języka wspólnego. Można je warstwować w następujący sposób:

try {
   // code here
}
catch (SqlException odbcEx) {
   // Handle more specific SqlException exception here.
}
catch (Exception ex) {
   // Handle generic ones here.
}

Lub:

try {
   // code here
}
catch (Exception ex) {
   if (ex is SqlException) {
      // Handle more specific SqlException exception here.
   }
   else {
      // Handle generic ones here.
   }
}

Istnieje również możliwość, że wywołanie metody dostawcy danych platformy .NET Framework kończy się niepowodzeniem w wątku puli wątków bez kodu użytkownika na stosie. W takim przypadku i w przypadku używania wywołań metody asynchronicznej należy zarejestrować UnhandledException zdarzenie, aby obsłużyć te wyjątki i uniknąć awarii aplikacji.

Właściwości

Nazwa Opis
Class

Pobiera poziom ważności błędu zwróconego z dostawcy danych programu .NET Framework dla programu SQL Server.

ClientConnectionId

Reprezentuje identyfikator połączenia klienta. Aby uzyskać więcej informacji, zobacz Śledzenie danych w ADO.NET.

Data

Pobiera kolekcję par klucz/wartość, które zapewniają dodatkowe informacje zdefiniowane przez użytkownika dotyczące wyjątku.

(Odziedziczone po Exception)
ErrorCode

HRESULT Pobiera błąd.

(Odziedziczone po ExternalException)
Errors

Pobiera kolekcję co najmniej jednego obiektu SqlError, które zawierają szczegółowe informacje o wyjątkach generowanych przez .NET Framework Dostawca danych dla SQL Server.

HelpLink

Pobiera lub ustawia link do pliku pomocy skojarzonego z tym wyjątkiem.

(Odziedziczone po Exception)
HResult

Pobiera lub ustawia HRESULT, zakodowaną wartość liczbową przypisaną do określonego wyjątku.

(Odziedziczone po Exception)
InnerException

Exception Pobiera wystąpienie, które spowodowało bieżący wyjątek.

(Odziedziczone po Exception)
LineNumber

Pobiera numer wiersza w Transact-SQL partii poleceń lub procedury składowanej, która wygenerowała błąd.

Message

Pobiera tekst opisujący błąd.

Message

Pobiera komunikat opisujący bieżący wyjątek.

(Odziedziczone po Exception)
Number

Pobiera liczbę identyfikującą typ błędu.

Procedure

Pobiera nazwę procedury składowanej lub zdalnego wywołania procedury (RPC), które wygenerowało błąd.

Server

Pobiera nazwę komputera z uruchomionym wystąpieniem programu SQL Server, które wygenerowało błąd.

Source

Pobiera nazwę dostawcy, który wygenerował błąd.

StackTrace

Pobiera reprezentację ciągu natychmiastowych ramek na stosie wywołań.

(Odziedziczone po Exception)
State

Pobiera kod błędu liczbowego z programu SQL Server, który reprezentuje błąd, ostrzeżenie lub komunikat "nie znaleziono danych". Aby uzyskać więcej informacji na temat dekodowania tych wartości, zobacz Zdarzenia i błędy aparatu bazy danych.

TargetSite

Pobiera metodę, która zgłasza bieżący wyjątek.

(Odziedziczone po Exception)

Metody

Nazwa Opis
Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetBaseException()

Po zastąpieniu w klasie pochodnej funkcja zwraca Exception główną przyczynę co najmniej jednego kolejnego wyjątku.

(Odziedziczone po Exception)
GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetObjectData(SerializationInfo, StreamingContext)

Ustawia element SerializationInfo z informacjami o wyjątku.

GetType()

Pobiera typ środowiska uruchomieniowego bieżącego wystąpienia.

(Odziedziczone po Exception)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Object.

(Odziedziczone po Object)
ToString()

Zwraca ciąg reprezentujący bieżący SqlException obiekt i zawiera identyfikator połączenia klienta (aby uzyskać więcej informacji, zobacz ClientConnectionId).

ToString()

Tworzy i zwraca reprezentację ciągu bieżącego wyjątku.

(Odziedziczone po Exception)
ToString()

Zwraca ciąg zawierający hrESULT błędu.

(Odziedziczone po ExternalException)

Zdarzenia

Nazwa Opis
SerializeObjectState

Występuje, gdy wyjątek jest serializowany w celu utworzenia obiektu stanu wyjątku zawierającego serializowane dane dotyczące wyjątku.

(Odziedziczone po Exception)

Dotyczy

Zobacz też