Konfigurera logik för återförsök i SqlClient

Gäller för: .NET Framework .NET .NET Standard

Ladda ned ADO.NET

Den här artikeln visar hur man skapar en exponentiell återprövningsleverantör och tilldelar den till en SqlConnection. Leverantören försöker om drivrutinens inbyggda lista över övergående anslutningsfel och försöker öppna anslutningen upp till fem gånger.

Förutsättningar

  • Microsoft. Data.SqlClient 3.0 eller en senare version.
  • En anslutningssträng för SQL Server, Azure SQL Database, Azure SQL Managed Instance eller SQL-databas i Microsoft Fabric.

Konfigurera en anslutningsåterprövningsleverantör

  1. Definiera alternativen för omprövning. Låt TransientErrors vara null så att providern använder den inbyggda listan över tillfälliga fel.

    // Define the retry logic parameters
    var options = new SqlRetryLogicOption()
    {
        // Tries 5 times before throwing an exception
        NumberOfTries = 5,
        // Preferred gap time to delay before retry
        DeltaTime = TimeSpan.FromSeconds(1),
        // Maximum gap time for each delay time before retry
        MaxTimeInterval = TimeSpan.FromSeconds(20)
    };
    
  2. Skapa en leverantör bland alternativen.

    // Create a retry logic provider
    SqlRetryLogicBaseProvider provider = SqlConfigurableRetryFactory.CreateExponentialRetryProvider(options);
    
  3. Tilldela leverantören innan du öppnar anslutningen.

    // Assumes that connection is a valid SqlConnection object 
    // Set the retry logic provider on the connection instance
    connection.RetryLogicProvider = provider;
    // Establishing the connection will retry if a transient failure occurs.
    connection.Open();
    

NumberOfTries = 5 tillåter ett första försök och upp till fyra försök. Den exponentiella leverantören ökar intervallet mellan försöken och lägger till slumpmässig jitter. MaxTimeInterval begränsar varje enskild fördröjning, inte den totala tiden som förflutit för alla försök.

Konfigurera nya försök för kommandon

Skapa en separat leverantör och tilldela den till SqlCommand.RetryLogicProvider. Sätt SqlRetryLogicOption.AuthorizedSqlCondition på ett predikat som endast returnerar true för kommandon som din applikation säkert kan upprepa.

Caution

En inbyggd leverantör försöker inte om ett kommando när anslutningen har en aktiv transaktion. Om ett tillfälligt fel ogiltigförklarar en transaktion, rulla tillbaka och försök om hela transaktionen. Försök inte köra om endast den sats som misslyckades.

Inställningen SqlRetryLogicOption.TransientErrors ersätter drivrutinens inbyggda fellista. För att utöka baslinjen utan att förlora standardvärdena, se Utöka den inbyggda listan över övergående fel.