SqlException Classe

Definizione

Eccezione generata quando SQL Server restituisce un avviso o un errore. La classe non può essere ereditata.

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
Ereditarietà
Ereditarietà
Ereditarietà
Attributi

Esempio

Nell'esempio seguente viene generata un'eccezione SqlException e quindi viene visualizzata l'eccezione .

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

Commenti

Questa classe viene creata ogni volta che il provider di dati .NET Framework per SQL Server rileva un errore generato dal server. Gli errori lato client vengono generati come eccezioni standard di Common Language Runtime. SqlException contiene sempre almeno un'istanza di SqlError.

I messaggi con un livello di gravità inferiore a 10 sono informativi e indicano problemi causati da errori nelle informazioni immesse da un utente. I livelli di gravità da 11 a 16 vengono generati dall'utente e possono essere corretti dall'utente. I livelli di gravità da 17 a 25 indicano errori del software o dell'hardware. Quando si verifica un errore di livello 17, 18 o 19, è possibile continuare a funzionare, anche se potrebbe non essere possibile eseguire un'istruzione specifica.

Se il livello di gravità è pari o inferiore a 19, l'istanza di SqlConnection rimane aperta. Quando il livello di gravità è 20 o superiore, il server chiude normalmente .SqlConnection L'utente può tuttavia riaprire la connessione e continuare. In entrambi i casi, viene generata un'eccezione SqlException dal metodo che esegue il comando.

Per informazioni sui messaggi informativi e di avviso inviati da SQL Server, vedere Eventi ed errori del motore di database. La classe esegue il SqlException mapping alla gravità di SQL Server.

Di seguito sono riportate informazioni generali sulla gestione delle eccezioni. Il codice deve intercettare le eccezioni per impedire l'arresto anomalo dell'applicazione e consentire la visualizzazione di un messaggio di errore pertinente all'utente. È possibile usare le transazioni di database per assicurarsi che i dati siano coerenti indipendentemente da ciò che accade nell'applicazione client (incluso un arresto anomalo). Funzionalità come 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. Le transazioni possono avere esito negativo, quindi intercettare gli errori e ripetere la transazione.

Si noti che a partire da .NET Framework 4.5, SqlException può restituire un oggetto interno Win32Exception.

La classe di eccezione di un provider di dati .NET Framework segnala errori specifici del provider. Ad esempio, System.Data.Odbc ha OdbcException, System.Data.OleDb ha OleDbException e System.Data.SqlClient ha SqlException. Per il livello di dettaglio dell'errore ottimale, rilevare queste eccezioni e usare i membri di queste classi di eccezioni per ottenere i dettagli dell'errore.

Oltre agli errori specifici del provider, i tipi di provider di dati .NET Framework possono generare eccezioni di .NET Framework, ad esempio System.OutOfMemoryException e System.ThreadIng.ThreadAbortException. Il ripristino da queste eccezioni potrebbe non essere possibile.

L'input non valido può causare la generazione di un'eccezione da parte di un tipo di provider di dati .NET Framework, ad esempio System.ArgumentException o System.IndexOutOfRangeException. La chiamata di un metodo al momento errato può generare System.InvalidOperationException.

In generale, scrivere un gestore eccezioni che intercetta eventuali eccezioni specifiche del provider, nonché eccezioni da Common Language Runtime. Questi valori possono essere sovrapposti come indicato di seguito:

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

Oppure:

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 non riesca in un thread del pool di thread senza codice utente nello stack. In questo caso, e quando si usano chiamate di metodo asincrone, è necessario registrare l'evento UnhandledException per gestire tali eccezioni ed evitare l'arresto anomalo dell'applicazione.

Proprietà

BatchCommand

Se l'eccezione DbException è stata generata durante l'esecuzione di , DbBatchfa riferimento all'eccezione specifica DbBatchCommand che ha attivato l'eccezione.

(Ereditato da DbException)
Class

Ottiene il livello di gravità dell'errore restituito dal provider di dati .NET Framework di SQL Server.

ClientConnectionId

Rappresenta l'ID connessione client. Per altre informazioni, vedere Traccia dati in ADO.NET.

Data

Ottiene una raccolta di coppie chiave/valore che forniscono informazioni definite dall'utente aggiuntive sull'eccezione.

(Ereditato da Exception)
DbBatchCommand

Quando ne viene eseguito l'override in una classe derivata, se DbException questo viene generato durante l'esecuzione di un DbBatchoggetto , fa riferimento all'eccezione specifica DbBatchCommand che ha attivato l'eccezione.

(Ereditato da DbException)
ErrorCode

Ottiene l'oggetto HRESULT dell'errore.

(Ereditato da 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.

HelpLink

Ottiene o imposta un collegamento al file della Guida associato all'eccezione.

(Ereditato da Exception)
HResult

Ottiene o imposta HRESULT, un valore numerico codificato che viene assegnato a un'eccezione specifica.

(Ereditato da Exception)
InnerException

Ottiene l'istanza di Exception che ha causato l'eccezione corrente.

(Ereditato da Exception)
IsTransient

Indica se l'errore rappresentato da DbException potrebbe essere un errore temporaneo, ad esempio se il tentativo di eseguire l'operazione di attivazione può avere esito positivo senza apportare modifiche.

(Ereditato da DbException)
LineNumber

Ottiene il numero di riga nel batch dei comandi Transact-SQL o nella stored procedure da cui è stato generato l'errore.

Message

Ottiene il testo che descrive l'errore.

Message

Ottiene un messaggio che descrive l'eccezione corrente.

(Ereditato da Exception)
Number

Ottiene un numero che identifica il tipo di errore.

Procedure

Ottiene il nome della stored procedure o della RPC (Remote Procedure Call) che ha generato l'errore.

Server

Ottiene il nome del computer su cui è in esecuzione un'istanza di SQL Server da cui è stato generato l'errore.

Source

Ottiene il nome del provider che ha generato l'errore.

SqlState

Per i provider di database che la supportano, contiene un codice restituito SQL standard di 5 caratteri che indica l'esito positivo o negativo dell'operazione sul database. I primi 2 caratteri rappresentano la classe del codice restituito, ad esempio errore, esito positivo, mentre gli ultimi 3 caratteri rappresentano la sottoclasse , che consentono il rilevamento degli scenari di errore in una modalità portabile da database.

Per i provider di database che non la supportano o per gli scenari di errore non applicabili, contiene null.

(Ereditato da DbException)
StackTrace

Ottiene una rappresentazione di stringa dei frame immediati nello stack di chiamate.

(Ereditato da 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. Per altre informazioni su come decodificare questi valori, vedere Database Engine Events and Errors (Eventi ed errori del motore di database).

TargetSite

Ottiene il metodo che genera l'eccezione corrente.

(Ereditato da Exception)

Metodi

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da 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.

(Ereditato da Exception)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetObjectData(SerializationInfo, StreamingContext)

Imposta l'oggetto SerializationInfo con le informazioni sull'eccezione.

GetObjectData(SerializationInfo, StreamingContext)
Obsoleti.

Quando ne viene eseguito l'override in una classe derivata, imposta il controllo SerializationInfo con le informazioni sull'eccezione.

(Ereditato da Exception)
GetType()

Ottiene il tipo di runtime dell'istanza corrente.

(Ereditato da Exception)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto SqlException corrente e include l'ID connessione client (per ulteriori informazioni, vedere ClientConnectionId).

ToString()

Restituisce una stringa contenente il valore HRESULT dell'errore.

(Ereditato da ExternalException)
ToString()

Crea e restituisce una rappresentazione di stringa dell'eccezione corrente.

(Ereditato da Exception)

Eventi

SerializeObjectState
Obsoleti.

Si verifica quando un'eccezione viene serializzata per creare un oggetto di stato eccezione contenente i dati serializzati relativi all'eccezione.

(Ereditato da Exception)

Si applica a

Vedi anche