SqlException Klasa

Definicja

Wyjątek, który jest zgłaszany, gdy program SQL Server zwraca ostrzeżenia lub błędu.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
[System.Serializable]
public sealed class SqlException : System.Data.Common.DbException
type SqlException = class
    inherit DbException
Public NotInheritable Class SqlException
Inherits DbException
Dziedziczenie
Atrybuty

Przykłady

Poniższy przykład generuje SqlException , a następnie wyświetla wyjątku.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 w każdym przypadku, gdy dla programu .NET Framework Data Provider for SQL Server, wystąpi 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 standardowa 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 o ważności na poziomie 10 lub mniej mają charakter informacyjny i wskazują na problemy spowodowane przez błędy w informacje, które użytkownik wprowadził.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, od 11 do 16 są generowane przez użytkownika, a problem można rozwiązać 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 z 17 do 25 wskazują błędy oprogramowania lub sprzętu.Severity levels from 17 through 25 indicate software or hardware errors. Jeśli poziom 17 18 lub 19 wystąpi błąd, możesz kontynuować pracę, chociaż może nie być możliwe do wykonania 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.

SqlConnection Pozostaje otwarty, gdy poziom ważności jest 19 lub mniej.The SqlConnection remains open when the severity level is 19 or less. Jeśli poziom ważności jest mniejsze niż 20, serwer zazwyczaj zamyka SqlConnection.When the severity level is 20 or greater, the server ordinarily closes the SqlConnection. Jednak użytkownik może ponownie otworzyć połączenie i kontynuować.However, the user can reopen the connection and continue. W obu przypadkach SqlException jest generowany przez metody wykonywania polecenia.In both cases, a SqlException is generated by the method executing the command.

Aby uzyskać informacji na temat komunikaty ostrzegawcze oraz informacyjne wysyłane przez program SQL Server, zobacz zdarzenia aparatu bazy danych i błędy.For information about the warning and informational messages sent by SQL Server, see Database Engine Events and Errors. SqlException Klasy map ważności programu SQL Server.The SqlException class maps to SQL Server severity.

Poniżej przedstawiono ogólne informacje na temat obsługi wyjątków.The following is general information on handling exceptions. Twój kod przechwytywać wyjątków, które uniemożliwiają aplikacji uległa awarii i umożliwić wyświetlanie odpowiedni komunikat 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. Transakcji bazy danych można użyć, aby upewnić się, że dane są zgodne, niezależnie od tego, co dzieje się w aplikacji klienta (w tym awarii).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 zainicjowanych (w typu System.Data.OleDb.OleDbConnection System.Data.ODBC.ODBCConnection i System.Data.SqlClient.SqlConnection) zapewnić spójność danych niezależnie od tego, wyjątki wywoływane 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. Transakcji może zakończyć się niepowodzeniem, więc przechwytywać błędy i spróbuj ponownie wykonać transakcję.Transactions can fail, so catch failures and retry the transaction.

Należy pamiętać, że od programu .NET Framework 4.5, SqlException może zwrócić wewnętrznego Win32Exception.Note that beginning with .NET Framework 4.5, SqlException can return an inner Win32Exception.

Klasy wyjątków 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 oledbexception — i System.Data.SqlClient ma sqlexception —.For example System.Data.Odbc has OdbcException, System.Data.OleDb has OleDbException, and System.Data.SqlClient has SqlException. Najlepsze poziomu szczegółów błędu przechwytywać te wyjątki i użyj członkowie tych klas wyjątków, aby uzyskać szczegółowe informacje o błędzie.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łędy specyficzne dla dostawcy typów dostawcy danych .NET Framework można podnieść wyjątki .NET Framework, 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 nie być możliwe.Recovery from these exceptions may not be possible.

Nieprawidłowe dane wejściowe mogą spowodować typ dostawcy danych .NET Framework zgłosić wyjątek, takich 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 w czasie nieprawidłowy może zgłosić System.InvalidOperationException.Calling a method at the wrong time can raise System.InvalidOperationException.

Tak, ogólnie rzecz biorąc, zapis do obsługi wyjątku, który przechwytuje dowolnego dostawcy określone wyjątki, jak również wyjątki wywoływane przez środowisko uruchomieniowe 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. Te mogą być warstwowe w następujący sposób: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.  
}  
  

lub:Or:

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

Istnieje także możliwość wywołania metody dostawcy danych .NET Framework nie powiedzie się w wątku z puli wątków o braku 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 korzystając z wywołania metody asynchronicznej, musisz się zarejestrować, UnhandledException zdarzeń do obsługi tych wyjątków 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 .NET Framework Data Provider for 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 danych śledzenia 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)
Errors

Pobiera kolekcję co najmniej jednego SqlError obiekty, które zapewniają szczegółowe informacje na temat wyjątków wygenerowanych przez .NET Framework Data Provider for 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 wystąpienie Exception, które spowodowało wyjątek bieżący.Gets the Exception instance that caused the current exception.

(Odziedziczone po Exception)
LineNumber

Pobiera numer wiersza w partii polecenia języka Transact-SQL lub procedury składowanej, który wygenerował 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.

Number

Pobiera numer, który identyfikuje 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óry wygenerował 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 jest uruchomione wystąpienia programu SQL Server, który wygenerował 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.

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 programu 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 dotyczących sposobu dekodowania tych wartości, zobacz zdarzenia aparatu bazy danych i błędy.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 określony obiekt jest równy bieżącemu obiektowi.Determines whether the specified object is equal to the current object.

(Odziedziczone po Object)
GetBaseException()

Gdy jest zastępowany w klasie pochodnej, zwraca Exception, który jest 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)

Zestawy SerializationInfo przy użyciu informacji o wyjątku.Sets the SerializationInfo with information about the 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 Object.Creates a shallow copy of the current Object.

(Odziedziczone po Object)
ToString()

Zwraca ciąg reprezentujący bieżącą SqlException obiektu 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).

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ż