sql >> Databasteknik >  >> RDS >> Sqlserver

hur man upptäcker sql-server timeout från .NET-applikation utan att använda catch Exception

Nej, inte riktigt.

Standardsättet är att använda try/catch och hantera SqlException Nummer 1205 (offret för dödläge) och försök igen med din fråga:

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

[Obs:break-satser har inte lagts till för att vara kompakta

Observera även , kan många låsningsproblem elimineras genom att tillhandahålla lämpliga täckande index.



  1. Mellanslag i ett databasfält tas inte bort av trim()

  2. Överför parametrar till Oracle SQL-fil från batchfil

  3. Vad gör 'COLLATE SQL_Latin1_General_CP1_CI_AS'?

  4. MySQL - Att ta reda på vilka index som ska användas och inte fungera som förväntat