Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

come rilevare il timeout del server sql dall'applicazione .NET senza utilizzare l'eccezione catch

No, non proprio.

Il modo standard è usare try/catch e gestisci SqlException Numero 1205 (vittima di stallo) e riprova a eseguire la query:

    try
    {
        // do stuff...
    }
    catch (SqlException sqlEx)
    {
        switch (sqlEx.Number)
        {
            case -2:   // Client Timeout
            case 701:  // Out of Memory
            case 1204: // Lock Issue 

            case 1205: // >>> Deadlock Victim
                // handle deadlock
                break;

            case 1222: // Lock Request Timeout
            case 2627: // Primary Key Violation
            case 8645: // Timeout waiting for memory resource 
            case 8651: // Low memory condition 
            ...
        }
    }

[Nota:le istruzioni di interruzione non sono state aggiunte per compattezza

Nota anche , molti problemi di blocco possono essere eliminati fornendo gli indici di copertura appropriati.