Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So erkennen Sie das SQL-Server-Timeout von der .NET-Anwendung, ohne die Catch-Ausnahme zu verwenden

Nein, nicht wirklich.

Der Standardweg ist die Verwendung von try/catch und SqlException behandeln Nummer 1205 (Deadlock-Opfer) und wiederholen Sie Ihre Abfrage:

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

[Anmerkung:Break-Anweisungen aus Gründen der Kompaktheit nicht hinzugefügt

Auch beachten , können viele Sperrprobleme durch Bereitstellung der entsprechenden abdeckenden Indizes beseitigt werden.