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

L'esempio seguente genera un SqlException e quindi Visualizza 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 Provider di dati .NET Framework 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. (Errori sul lato client vengono generati come eccezioni standard common language runtime). 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 che hanno un livello di gravità minore o pari a 10 sono a scopo informativi e indicano problemi causati da errori nelle informazioni immesse dall'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. 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 un livello di gravità 17, 18 o 19 errore si verifica, è possibile continuare a lavorare, anche se non è in grado di 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à è 20 o versione successiva, 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 eventi del motore di Database ed errori.For information about the warning and informational messages sent by SQL Server, see Database Engine Events and Errors. Il SqlException classe esegue il mapping a livello di gravità di SQL Server.The SqlException class maps to SQL Server severity.

Di seguito verrà fornite informazioni generali sulla gestione delle eccezioni.The following is general information on handling exceptions. Il codice dovrebbe intercettare le eccezioni per impedire l'arresto anomalo dell'applicazione e consentire la visualizzazione di un messaggio di errore pertinenti 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 usare le transazioni di database per garantire che i dati sono coerenti indipendentemente dal fatto che cosa accade nell'applicazione client (incluso un arresto anomalo del sistema).You can use database transactions to ensure that the data is consistent regardless of what happens in the client application (including a crash). Funzionalità come System.Transaction.TransactionScope o il metodo BeginTransaction (in OleDbConnection System.Data.ODBC.ODBCConnection e SqlConnection) di garantire che i 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 gli errori e ripetere la transazione.Transactions can fail, so catch failures and retry the transaction.

Si noti che .NET Framework 4.5, a partire SqlException può restituire un inner Win32Exception.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 ha segnalato errori specifici del provider.The exception class of a .NET Framework data provider reports provider-specific errors. Ad esempio System.Data.Odbc ha OdbcException OleDb ha OleDbException e SqlClient è SqlException.For example System.Data.Odbc has OdbcException, System.Data.OleDb has OleDbException, and System.Data.SqlClient has SqlException. Per il miglior livello di dettagli sull'errore, rilevare queste eccezioni e usare i membri di queste classi di eccezione 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, tipi di provider di dati .NET Framework possono generare eccezioni di .NET Framework, ad esempio System. OutOfMemoryException e System.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. Ripristino da tali eccezioni potrebbe non essere possibile.Recovery from these exceptions may not be possible.

Input non valido può causare un tipo di provider di dati .NET Framework 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. Chiamata a un metodo nel momento sbagliato può generare System. InvalidOperationException.Calling a method at the wrong time can raise System.InvalidOperationException.

Pertanto, in generale, scrivere un gestore di eccezioni che memorizza nella cache qualsiasi provider di eccezioni specifiche, nonché le eccezioni di 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. Possono essere sovrapposti come indicato di seguito: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 .NET Framework data provider esito negativo in un 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 usano le chiamate asincrone, è necessario registrare il UnhandledException eventi 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 per 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 una raccolta di uno o più SqlError gli oggetti che contengono informazioni dettagliate relative alle eccezioni generate dal Provider di dati .NET Framework per 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 all'interno del batch di comandi Transact-SQL o stored procedure che ha 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 in cui è in esecuzione un'istanza di SQL Server che ha 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, avviso o messaggio di "dati non trovati".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 corrente SqlException dell'oggetto e include l'ID connessione client (per altre 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