Udostępnij za pośrednictwem


SqlException Klasa

Definicja

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

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

Przykłady

Poniższy przykład generuje wyjątek 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 dostawca danych programu .NET Framework dla programu 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 o poziomie ważności 10 lub mniejszym są informacyjne i wskazują problemy spowodowane błędami w informacjach wprowadzonych przez użytkownika. 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ż nie można 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 element SqlConnection. 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 program SQL Server, zobacz Zdarzenia i błędy aparatu bazy danych. Klasa SqlException mapuje ważność programu 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ć wyświetlanie użytkownikowi 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łaszanych 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 programu .NET Framework 4.5, SqlException może zwrócić wewnętrzny Win32Exceptionelement .

Klasa wyjątku dostawcy danych programu .NET Framework zgłasza błędy specyficzne dla dostawcy. Na przykład system.Data.Odbc ma wartość OdbcException, system.Data.OleDb ma wyjątek OleDbException, a element System.Data.SqlClient ma wyjątek SqlException. Aby uzyskać najlepszy poziom szczegółów błędów, przechwyć te wyjątki i użyj składowych 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 programu .NET Framework mogą zgłaszać wyjątki programu .NET Framework, takie jak System.OutOfMemoryException i System.Threading.ThreadAbortException. Odzyskiwanie z tych wyjątków może być niemożliwe.

Nieprawidłowe dane wejściowe mogą spowodować, że typ dostawcy danych programu .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ść niepowodzenia wywołania metody dostawcy danych .NET Framework w wątku puli wątków bez kodu użytkownika na stosie. W tym 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

BatchCommand

Jeśli zostało to DbException zwrócone podczas wykonywania elementu DbBatch, odwołuje się do określonego DbBatchCommand elementu, który wyzwolił wyjątek.

(Odziedziczone po DbException)
Class

Pobiera poziom ważności błędu zwróconego przez dostawcę 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)
DbBatchCommand

Po przesłonięciu w klasie pochodnej, jeśli został on DbException zgłoszony podczas wykonywania DbBatchklasy , odwołuje się do określonego DbBatchCommand , który wyzwolił wyjątek.

(Odziedziczone po DbException)
ErrorCode

HRESULT Pobiera błąd.

(Odziedziczone po ExternalException)
Errors

Pobiera kolekcję jednego lub większej liczby SqlError obiektów, które zawierają szczegółowe informacje o wyjątkach generowanych przez dostawcę danych programu .NET Framework dla programu 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)
IsTransient

Wskazuje, czy błąd reprezentowany przez ten DbException błąd może być błędem przejściowym, tj. jeśli ponowienie próby operacji wyzwalania może zakończyć się powodzeniem bez żadnych innych zmian.

(Odziedziczone po DbException)
LineNumber

Pobiera numer wiersza w partii poleceń Języka Transact-SQL lub procedurę składowaną, 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.

SqlState

W przypadku dostawców baz danych, którzy ją obsługują, zawiera standardowy kod powrotny SQL 5 znaków wskazujący powodzenie lub niepowodzenie operacji bazy danych. Pierwsze 2 znaki reprezentują klasę kodu powrotnego (np. błąd, powodzenie), podczas gdy ostatnie 3 znaki reprezentują podklasę, umożliwiając wykrywanie scenariuszy błędów w przenośnej bazie danych.

W przypadku dostawców baz danych, którzy jej nie obsługują, lub w przypadku scenariuszy błędów, których nie można zastosować, zawiera wartość null.

(Odziedziczone po DbException)
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 komunikat o błędzie, ostrzeżeniu lub "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

Equals(Object)

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

(Odziedziczone po Object)
GetBaseException()

Po przesłonięciu 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.

GetObjectData(SerializationInfo, StreamingContext)
Przestarzałe.

Po zastąpieniu w klasie pochodnej ustawia SerializationInfo element z informacjami o wyjątku.

(Odziedziczone po Exception)
GetType()

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

(Odziedziczone po Exception)
MemberwiseClone()

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

(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()

Zwraca ciąg zawierający wartość HRESULT błędu.

(Odziedziczone po ExternalException)
ToString()

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

(Odziedziczone po Exception)

Zdarzenia

SerializeObjectState
Przestarzałe.

Występuje, gdy wyjątek jest serializowany w celu utworzenia obiektu stanu wyjątku, który zawiera serializowane dane dotyczące wyjątku.

(Odziedziczone po Exception)

Dotyczy

Zobacz też