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 generato SqlException un oggetto 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 .NET Framework provider di dati per SQL Server rileva un errore generato dal server. Gli errori lato client vengono generati come eccezioni Common Language Runtime standard. SqlException contiene sempre almeno un'istanza di SqlError .

I messaggi con livello di gravità 10 o inferiore 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 lavorare, 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 in genere chiude 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 di avviso e informativi inviati da SQL Server, vedere motore di database Events and Errors. La SqlException classe esegue il mapping SQL Server gravità.

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 garantire 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 rilevare gli errori e ripetere la transazione.

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

La classe di eccezione di un provider .NET Framework di dati 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 migliore, intercettare queste eccezioni e usare i membri di queste classi di eccezioni per ottenere i dettagli dell'errore.

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. Il ripristino da queste eccezioni potrebbe non essere possibile.

Un input non valido può .NET Framework un tipo di provider di dati per generare un'eccezione, ad esempio System.ArgumentException o System.IndexOutOfRangeException. La chiamata di un metodo nel momento errato può generare System.InvalidOperationException.

Pertanto, in generale, scrivere un gestore eccezioni che intercetti eventuali eccezioni specifiche del provider, nonché eccezioni da Common Language Runtime. Questi elementi possono essere a più livelli nel modo seguente:

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

Proprietà

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

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
Obsoleta.

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