SqlException Class

Definition

Eccezione generata quando SQL Server restituisce un avviso o un errore.The exception that is thrown when SQL Server returns a warning or error. Questa classe non può essere ereditata.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
type SqlException = class
    inherit SystemException
Public NotInheritable Class SqlException
Inherits DbException
Public NotInheritable Class SqlException
Inherits SystemException
Inheritance
Inheritance
Inheritance
Attributes

Examples

Nell'esempio seguente viene generato un SqlException e quindi viene visualizzata l'eccezione.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

Remarks

Questa classe viene creata ogni volta che il .NET Framework provider di dati per SQL Server rileva un errore generato dal server.This class is created whenever the .NET Framework Data Provider for SQL Server encounters an error generated from the server. Gli errori sul lato client vengono generati come eccezioni Common Language Runtime standard. SqlException contiene sempre almeno un'istanza di SqlError.(Client side errors are thrown as standard common language runtime exceptions.) SqlException always contains at least one instance of SqlError.

I messaggi con livello di gravità minore o uguale a 10 sono informativi e indicano problemi causati da errori nelle informazioni immesse da un utente.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. I livelli di gravità da 11 a 16 sono generati dall'utente e possono essere corretti dall'utente.Severity levels from 11 through 16 are generated by the user, and can be corrected by the user. I livelli di gravità da 17 a 25 indicano errori del software o dell'hardware.Severity levels from 17 through 25 indicate software or hardware errors. Quando si verifica un errore di livello 17, 18 o 19, è possibile continuare a funzionare anche se non è possibile eseguire un'istruzione specifica.When a level 17, 18, or 19 error occurs, you can continue working, although you might not be able to execute a particular statement.

Se il livello di gravità è pari o inferiore a 19, l'istanza di SqlConnection rimane aperta.The SqlConnection remains open when the severity level is 19 or less. Quando il livello di gravità è maggiore o uguale a 20, il server chiude normalmente il SqlConnection.When the severity level is 20 or greater, the server ordinarily closes the SqlConnection. L'utente può tuttavia riaprire la connessione e continuare.However, the user can reopen the connection and continue. In entrambi i casi, viene generata un'eccezione SqlException dal metodo che esegue il comando.In both cases, a SqlException is generated by the method executing the command.

Per informazioni sui messaggi di avviso e informativi inviati da SQL Server, vedere motore di database eventi ed errori.For information about the warning and informational messages sent by SQL Server, see Database Engine Events and Errors. La classe SqlException viene mappata a SQL Server gravità.The SqlException class maps to SQL Server severity.

Di seguito sono riportate informazioni generali sulla gestione delle eccezioni.The following is general information on handling exceptions. Il codice deve rilevare le eccezioni per impedire l'arresto anomalo dell'applicazione e consentire la visualizzazione di un messaggio di errore pertinente all'utente.Your code should catch exceptions to prevent the application from crashing and to allow displaying a relevant error message to the user. È possibile utilizzare le transazioni del database per garantire la coerenza dei dati indipendentemente da ciò che si verifica nell'applicazione client (incluso un arresto anomalo).You can use database transactions to ensure that the data is consistent regardless of what happens in the client application (including a crash). Funzionalità quali System. Transaction. TransactionScope o il metodo BeginTransaction (in System. Data. OleDb. OleDbConnection, System. Data. ODBC. ODBCConnection e System. Data. SqlClient. SqlConnection) garantiscono dati coerenti indipendentemente dalle eccezioni generate da un provider.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. Le transazioni possono avere esito negativo, quindi rilevare errori e ripetere la transazione.Transactions can fail, so catch failures and retry the transaction.

Si noti che a partire da .NET Framework 4,5, SqlException può restituire un Win32Exceptioninterno.Note that beginning with .NET Framework 4.5, SqlException can return an inner Win32Exception.

La classe di eccezione di un provider di dati .NET Framework segnala errori specifici del provider.The exception class of a .NET Framework data provider reports provider-specific errors. Ad esempio, System. Data. ODBC dispone di OdbcException, System. Data. OleDb con OleDbexception e System. Data. SqlClient con SqlException.For example System.Data.Odbc has OdbcException, System.Data.OleDb has OleDbException, and System.Data.SqlClient has SqlException. Per ottenere il massimo livello di dettaglio degli errori, rilevare le eccezioni e usare i membri di queste classi di eccezioni per ottenere i dettagli dell'errore.For the best level of error detail, catch these exceptions and use the members of these exception classes to get details of the error.

Oltre agli errori specifici del provider, .NET Framework tipi di provider di dati possono generare eccezioni .NET Framework, ad esempio System. OutOfMemoryException e 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. Il ripristino da queste eccezioni potrebbe non essere possibile.Recovery from these exceptions may not be possible.

Un input errato può causare un .NET Framework tipo di provider di dati per generare un'eccezione, ad esempio System. ArgumentException o System. IndexOutOfRangeException.Bad input can cause a .NET Framework data provider type to raise an exception such as System.ArgumentException or System.IndexOutOfRangeException. La chiamata di un metodo in un momento errato può generare System. InvalidOperationException.Calling a method at the wrong time can raise System.InvalidOperationException.

Quindi, in generale, scrivere un gestore di eccezioni che intercetta eventuali eccezioni specifiche del provider, nonché le eccezioni dal Common Language Runtime.So, in general, write an exception handler that catches any provider specific exceptions as well as exceptions from the common language runtime. Questi possono essere sovrapposti come segue: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.  
}  
  

Oppure:Or:

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

È anche possibile che una chiamata al metodo del provider di dati .NET Framework abbia esito negativo in un thread del pool di thread senza codice utente nello stack.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. In questo caso e quando si utilizzano chiamate asincrone al metodo, è necessario registrare l'evento UnhandledException per gestire tali eccezioni ed evitare l'arresto anomalo dell'applicazione.In this case, and when using asynchronous method calls, you must register the UnhandledException event to handle those exceptions and avoid application crash.

Properties

Class

Ottiene il livello di gravità dell'errore restituito dal provider di dati .NET Framework di SQL Server.Gets the severity level of the error returned from the .NET Framework Data Provider for SQL Server.

ClientConnectionId

Rappresenta l'ID connessione client.Represents the client connection ID. Per altre informazioni, vedere Traccia dati in ADO.NET.For more information, see Data Tracing in ADO.NET.

Data

Ottiene una raccolta di coppie chiave/valore che forniscono informazioni definite dall'utente aggiuntive sull'eccezione.Gets a collection of key/value pairs that provide additional user-defined information about the exception.

(Inherited from Exception)
ErrorCode

Ottiene l'oggetto HRESULT dell'errore.Gets the HRESULT of the error.

(Inherited from ExternalException)
Errors

Ottiene un insieme di uno o più oggetti SqlError che contengono informazioni dettagliate relative alle eccezioni generate dal provider di dati .NET Framework di 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

Ottiene o imposta un collegamento al file della Guida associato all'eccezione.Gets or sets a link to the help file associated with this exception.

(Inherited from Exception)
HResult

Ottiene o imposta HRESULT, un valore numerico codificato che viene assegnato a un'eccezione specifica.Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.

(Inherited from Exception)
InnerException

Ottiene l'istanza di Exception che ha causato l'eccezione corrente.Gets the Exception instance that caused the current exception.

(Inherited from Exception)
LineNumber

Ottiene il numero di riga nel batch dei comandi Transact-SQL o nella stored procedure da cui è stato generato l'errore.Gets the line number within the Transact-SQL command batch or stored procedure that generated the error.

Message

Ottiene il testo che descrive l'errore.Gets the text describing the error.

Message

Ottiene un messaggio che descrive l'eccezione corrente.Gets a message that describes the current exception.

(Inherited from Exception)
Number

Ottiene un numero che identifica il tipo di errore.Gets a number that identifies the type of error.

Procedure

Ottiene il nome della stored procedure o della RPC (Remote Procedure Call) che ha generato l'errore.Gets the name of the stored procedure or remote procedure call (RPC) that generated the error.

Server

Ottiene il nome del computer su cui è in esecuzione un'istanza di SQL Server da cui è stato generato l'errore.Gets the name of the computer that is running an instance of SQL Server that generated the error.

Source

Ottiene il nome del provider che ha generato l'errore.Gets the name of the provider that generated the error.

StackTrace

Ottiene una rappresentazione di stringa dei frame immediati nello stack di chiamate.Gets a string representation of the immediate frames on the call stack.

(Inherited from Exception)
State

Ottiene un codice di errore numerico da SQL Server che rappresenta un errore, un avviso o un messaggio in cui viene indicata l'impossibilità di trovare dati.Gets a numeric error code from SQL Server that represents an error, warning or "no data found" message. Per altre informazioni su come decodificare questi valori, vedere Database Engine Events and Errors (Eventi ed errori del motore di database).For more information about how to decode these values, see Database Engine Events and Errors.

TargetSite

Ottiene il metodo che genera l'eccezione corrente.Gets the method that throws the current exception.

(Inherited from Exception)

Methods

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetBaseException()

Quando ne viene eseguito l'override in una classe derivata, restituisce l'Exception che è la causa radice di una o più eccezioni successive.When overridden in a derived class, returns the Exception that is the root cause of one or more subsequent exceptions.

(Inherited from Exception)
GetHashCode()

Funge da funzione hash predefinita.Serves as the default hash function.

(Inherited from Object)
GetObjectData(SerializationInfo, StreamingContext)

Imposta SerializationInfo con le informazioni sull'eccezione.Sets the SerializationInfo with information about the exception.

GetObjectData(SerializationInfo, StreamingContext)

Quando ne viene eseguito l'override in una classe derivata, imposta il controllo SerializationInfo con le informazioni sull'eccezione.When overridden in a derived class, sets the SerializationInfo with information about the exception.

(Inherited from Exception)
GetType()

Ottiene il tipo di runtime dell'istanza corrente.Gets the runtime type of the current instance.

(Inherited from Exception)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto SqlException corrente e include l'ID connessione client (per ulteriori informazioni, vedere ClientConnectionId).Returns a string that represents the current SqlException object, and includes the client connection ID (for more information, see ClientConnectionId).

ToString()

Restituisce una stringa contenente il valore HRESULT dell'errore.Returns a string that contains the HRESULT of the error.

(Inherited from ExternalException)
ToString()

Crea e restituisce una rappresentazione di stringa dell'eccezione corrente.Creates and returns a string representation of the current exception.

(Inherited from Exception)

Events

SerializeObjectState

Si verifica quando un'eccezione viene serializzata per creare un oggetto di stato eccezione contenente i dati serializzati relativi all'eccezione.Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.

(Inherited from Exception)

Applies to

See also