SqlException Klasa

Definicja

Wyjątek, który jest generowany, gdy SQL Server zwraca ostrzeżenie lub błąd.The exception that is thrown when SQL Server returns a warning or error. Klasa ta nie może być dziedziczona.This class cannot be inherited.

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 SqlException a, a następnie wyświetla wyjątek.The following example generates a SqlException and then displays the exception.

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 .NET Framework dla SQL Server napotka błąd wygenerowany z serwera.This class is created whenever the .NET Framework Data Provider for SQL Server encounters an error generated from the server. (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 SqlError .(Client side errors are thrown as standard common language runtime exceptions.) SqlException always contains at least one instance of SqlError.

Komunikaty mające poziom ważności równy 10 lub mniej są informacyjne i wskazują problemy związane z błędami w informacjach wprowadzonych przez użytkownika.Messages that have a severity level of 10 or less are informational and indicate problems caused by mistakes in information that a user has entered. Poziomy ważności z 11 do 16 są generowane przez użytkownika i mogą być poprawione przez użytkownika.Severity levels from 11 through 16 are generated by the user, and can be corrected by the user. Poziomy ważności od 17 do 25 wskazują błędy oprogramowania lub sprzętu.Severity levels from 17 through 25 indicate software or hardware errors. Gdy wystąpi błąd poziomu 17, 18 lub 19, można kontynuować pracę, chociaż może nie być możliwe wykonanie określonej instrukcji.When a level 17, 18, or 19 error occurs, you can continue working, although you might not be able to execute a particular statement.

SqlConnectionPozostaje otwarty, gdy poziom ważności wynosi 19 lub mniej.The SqlConnection remains open when the severity level is 19 or less. Gdy poziom ważności wynosi 20 lub więcej, serwer zazwyczaj zamyka SqlConnection .When the severity level is 20 or greater, the server ordinarily closes the SqlConnection. Użytkownik może jednak ponownie otworzyć połączenie i kontynuować pracę.However, the user can reopen the connection and continue. W obu przypadkach SqlException jest generowany przez metodę wykonującą polecenie.In both cases, a SqlException is generated by the method executing the command.

Aby uzyskać informacje na temat ostrzeżeń i komunikatów informacyjnych wysyłanych przez SQL Server, zobacz zdarzenia i błędy aparatu bazy danych.For information about the warning and informational messages sent by SQL Server, see Database Engine Events and Errors. SqlExceptionKlasa jest mapowana na SQL Server ważności.The SqlException class maps to SQL Server severity.

Poniżej przedstawiono ogólne informacje dotyczące obsługi wyjątków.The following is general information on handling exceptions. Kod powinien przechwytywać wyjątki, aby zapobiec awarii aplikacji i umożliwić wyświetlanie odpowiedniego komunikatu o błędzie dla użytkownika.Your code should catch exceptions to prevent the application from crashing and to allow displaying a relevant error message to the user. 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 awaria).You can use database transactions to ensure that the data is consistent regardless of what happens in the client application (including a crash). Funkcje, takie jak system. Transaction. TransactionScope lub Metoda BeginTransaction (w System. Data. OleDb. OleDbConnection, system. Data. ODBC. ODBCConnection oraz system. Data. SqlClient. SqlConnection), zapewniają spójne dane niezależnie od wyjątków zgłoszonych przez dostawcę.Features like System.Transaction.TransactionScope or the BeginTransaction method (in System.Data.OleDb.OleDbConnection, System.Data.ODBC.ODBCConnection, and System.Data.SqlClient.SqlConnection) ensure consistent data regardless of exceptions raised by a provider. Transakcje mogą się nie powieść, więc Przechwyć błędy i spróbuj ponownie wykonać transakcję.Transactions can fail, so catch failures and retry the transaction.

Należy pamiętać, że począwszy od .NET Framework 4,5, SqlException może zwrócić wewnętrzny Win32Exception .Note that beginning with .NET Framework 4.5, SqlException can return an inner Win32Exception.

Klasa wyjątku dostawcy danych .NET Framework zgłasza błędy specyficzne dla dostawcy.The exception class of a .NET Framework data provider reports provider-specific errors. Na przykład system. Data. ODBC ma OdbcException, system. Data. OleDb ma polecenie OleDbexception, a system. Data. SqlClient ma SqlException.For example System.Data.Odbc has OdbcException, System.Data.OleDb has OleDbException, and System.Data.SqlClient has SqlException. Aby uzyskać szczegółowe informacje o błędzie, należy przechwytywać te wyjątki i korzystać z nich w celu uzyskania szczegółów dotyczących najlepszego poziomu błędu.For the best level of error detail, catch these exceptions and use the members of these exception classes to get details of the error.

Oprócz błędów specyficznych dla dostawcy, .NET Framework typy dostawców danych mogą zgłaszać .NET Framework wyjątków, takich jak system. OutOfMemoryException i system. Threading. ThreadAbortException.In addition to the provider-specific errors, .NET Framework data provider types can raise .NET Framework exceptions such as System.OutOfMemoryException and System.Threading.ThreadAbortException. Odzyskiwanie z tych wyjątków może być niemożliwe.Recovery from these exceptions may not be possible.

Złe dane wejściowe mogą spowodować, że typ .NET Framework dostawcy danych zgłosi wyjątek, taki jak system. ArgumentException lub system. IndexOutOfRangeException.Bad input can cause a .NET Framework data provider type to raise an exception such as System.ArgumentException or System.IndexOutOfRangeException. Wywołanie metody o niewłaściwym czasie może wywołać system. InvalidOperationException.Calling a method at the wrong time can raise System.InvalidOperationException.

Dlatego w ogólności należy napisać program obsługi wyjątków, który przechwytuje wszystkie wyjątki specyficzne dla dostawcy, a także wyjątki z aparatu plików wykonywalnych języka wspólnego.So, in general, write an exception handler that catches any provider specific exceptions as well as exceptions from the common language runtime. Można je przystąpić do następujących warstw:These can be layered as follows:

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

OrazOr:

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

Możliwe jest również, aby wywołanie metody dostawcy danych .NET Framework nie powiodło się w wątku puli wątków bez kodu użytkownika na stosie.It is also possible for a .NET Framework data provider method call to fail on a thread pool thread with no user code on the stack. W tym przypadku i w przypadku używania wywołań metod asynchronicznych należy zarejestrować zdarzenie, UnhandledException Aby obsługiwać te wyjątki i uniknąć awarii aplikacji.In this case, and when using asynchronous method calls, you must register the UnhandledException event to handle those exceptions and avoid application crash.

Właściwości

Class

Pobiera poziom ważności błędu zwrócony z Dostawca danych .NET Framework dla SQL Server.Gets the severity level of the error returned from the .NET Framework Data Provider for SQL Server.

ClientConnectionId

Reprezentuje identyfikator połączenia klienta.Represents the client connection ID. Aby uzyskać więcej informacji, zobacz śledzenie danych w ADO.NET.For more information, see Data Tracing in ADO.NET.

Data

Pobiera kolekcję par klucz/wartość, które zawierają dodatkowe informacje zdefiniowane przez użytkownika dotyczące wyjątku.Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(Odziedziczone po Exception)
ErrorCode

Pobiera HRESULT błąd.Gets the HRESULT of the error.

(Odziedziczone po ExternalException)
Errors

Pobiera kolekcję co najmniej jednego SqlError obiektu, który daje szczegółowe informacje o wyjątkach wygenerowanych przez Dostawca danych .NET Framework dla SQL Server.Gets a collection of one or more SqlError objects that give detailed information about exceptions generated by the .NET Framework Data Provider for SQL Server.

HelpLink

Pobiera lub ustawia link do pliku pomocy skojarzonego z tym wyjątkiem.Gets or sets a link to the help file associated with this exception.

(Odziedziczone po Exception)
HResult

Pobiera lub ustawia wartość HRESULT, kodowane wartości liczbowe przypisane do określonego wyjątku.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(Odziedziczone po Exception)
InnerException

Pobiera Exception wystąpienie, które spowodowało bieżący wyjątek.Gets the Exception instance that caused the current exception.

(Odziedziczone po Exception)
IsTransient

Wskazuje, czy błąd reprezentowany przez to DbException może być błędem przejściowym, tj. Jeśli ponowienie operacji wyzwalającej może zakończyć się powodzeniem bez żadnej innej zmiany.Indicates whether the error represented by this DbException could be a transient error, i.e. if retrying the triggering operation may succeed without any other change.

(Odziedziczone po DbException)
LineNumber

Pobiera numer wiersza w ramach partii poleceń języka Transact-SQL lub procedury składowanej, która wygenerowała błąd.Gets the line number within the Transact-SQL command batch or stored procedure that generated the error.

Message

Pobiera tekst opisujący błąd.Gets the text describing the error.

Message

Pobiera komunikat, który opisuje bieżący wyjątek.Gets a message that describes the current exception.

(Odziedziczone po Exception)
Number

Pobiera numer identyfikujący typ błędu.Gets a number that identifies the type of error.

Procedure

Pobiera nazwę procedury składowanej lub zdalnego wywołania procedury (RPC), które wygenerowało błąd.Gets the name of the stored procedure or remote procedure call (RPC) that generated the error.

Server

Pobiera nazwę komputera, na którym działa wystąpienie SQL Server, które wygenerowało błąd.Gets the name of the computer that is running an instance of SQL Server that generated the error.

Source

Pobiera nazwę dostawcy, który wygenerował błąd.Gets the name of the provider that generated the error.

SqlState

W przypadku dostawców baz danych, które go obsługują, zawiera standardowy kod powrotu SQL 5 znaków wskazujący powodzenie lub niepowodzenie operacji bazy danych.For database providers which support it, contains a standard SQL 5-character return code indicating the success or failure of the database operation. Pierwsze 2 znaki reprezentuje klasę kodu powrotu (np. Error, Success), podczas gdy ostatnie 3 znaki reprezentują podklasę, umożliwiając wykrywanie scenariuszy błędów w sposób przenośny w bazie danych.The first 2 characters represent the class of the return code (e.g. error, success), while the last 3 characters represent the subclass, allowing detection of error scenarios in a database-portable way.

W przypadku dostawców baz danych, które ich nie obsługują, lub dla nieodpowiednich scenariuszy błędów zawiera null .For database providers which don't support it, or for inapplicable error scenarios, contains null.

(Odziedziczone po DbException)
StackTrace

Pobiera ciąg reprezentujący bezpośrednie ramki w stosie wywołań.Gets a string representation of the immediate frames on the call stack.

(Odziedziczone po Exception)
State

Pobiera liczbowy kod błędu z SQL Server, który reprezentuje błąd, ostrzeżenie lub komunikat "nie znaleziono danych".Gets a numeric error code from SQL Server that represents an error, warning or "no data found" message. Aby uzyskać więcej informacji na temat dekodowania tych wartości, zobacz zdarzenia i błędy aparatu bazy danych.For more information about how to decode these values, see Database Engine Events and Errors.

TargetSite

Pobiera metodę, która zgłasza bieżący wyjątek.Gets the method that throws the current exception.

(Odziedziczone po Exception)

Metody

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.Determines whether the specified object is equal to the current object.

(Odziedziczone po Object)
GetBaseException()

Gdy jest zastępowany w klasie pochodnej, zwraca wartość Exception będącą główną przyczyną jednego lub kilku kolejnych wyjątków.When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

(Odziedziczone po Exception)
GetHashCode()

Służy jako domyślna funkcja skrótu.Serves as the default hash function.

(Odziedziczone po Object)
GetObjectData(SerializationInfo, StreamingContext)

Ustawia SerializationInfo Informacje o wyjątku.Sets the SerializationInfo with information about the exception.

GetObjectData(SerializationInfo, StreamingContext)

Gdy jest zastępowany w klasie pochodnej, ustawia SerializationInfo Informacje o wyjątku.When overridden in a derived class, sets the SerializationInfo with information about the exception.

(Odziedziczone po Exception)
GetType()

Pobiera typ środowiska uruchomieniowego bieżącego wystąpienia.Gets the runtime type of the current instance.

(Odziedziczone po Exception)
MemberwiseClone()

Tworzy skróconą kopię bieżącego elementu Object .Creates a shallow copy of the current Object.

(Odziedziczone po Object)
ToString()

Zwraca ciąg, który reprezentuje bieżący SqlException obiekt i zawiera identyfikator połączenia klienta (Aby uzyskać więcej informacji, zobacz ClientConnectionId ).Returns a string that represents the current SqlException object, and includes the client connection ID (for more information, see ClientConnectionId).

ToString()

Zwraca ciąg, który zawiera wartość HRESULT błędu.Returns a string that contains the HRESULT of the error.

(Odziedziczone po ExternalException)
ToString()

Tworzy i zwraca reprezentację ciągu bieżącego wyjątku.Creates and returns a string representation of the current exception.

(Odziedziczone po Exception)

Zdarzenia

SerializeObjectState

Występuje, gdy wyjątek jest serializowany w celu utworzenia obiektu stanu wyjątku, który zawiera serializowane dane dotyczące wyjątku.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(Odziedziczone po Exception)

Dotyczy

Zobacz też