SqlException SqlException SqlException SqlException Class

Definizione

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
[System.Serializable]
public sealed class SqlException : System.Data.Common.DbException
type SqlException = class
    inherit DbException
Public NotInheritable Class SqlException
Inherits DbException
Ereditarietà
Attributi

Esempi

Nell'esempio seguente viene generato SqlException un oggetto e 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

Commenti

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. contiene sempre almeno un'istanza di SqlError. SqlException(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 in SqlConnectiongenere chiude.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 SqlException classe esegue il mapping 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 generato 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 SqlException 4,5, può restituire Win32Exceptionun oggetto interno.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 UnhandledException l'evento 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.

Proprietà

Class Class Class 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 ClientConnectionId ClientConnectionId 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 Data Data Data

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

(Inherited from Exception)
Errors Errors Errors 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 HelpLink HelpLink 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 HResult HResult 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 InnerException InnerException 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 LineNumber LineNumber 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 Message Message Message

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

Number Number Number Number

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

Procedure Procedure Procedure 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 Server Server 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 Source Source Source

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

StackTrace StackTrace StackTrace 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 State State 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 TargetSite TargetSite TargetSite

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

(Inherited from Exception)

Metodi

Equals(Object) Equals(Object) Equals(Object) 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() GetBaseException() GetBaseException() GetBaseException()

Se utilizzato come metodo di 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() GetHashCode() GetHashCode() GetHashCode()

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

(Inherited from Object)
GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext)

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

GetType() GetType() GetType() GetType()

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

(Inherited from Exception)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

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

(Inherited from Object)
ToString() ToString() ToString() 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).

Eventi

SerializeObjectState SerializeObjectState SerializeObjectState 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)

Si applica a

Vedi anche