Configurar a lógica de repetição no SqlClient

Aplica-se a: .NET Framework .NET .NET Standard

Baixar ADO.NET

Este artigo mostra como criar um provedor de repetição exponencial e atribuí-lo a um SqlConnection. O fornecedor tenta novamente a lista incorporada do driver de erros de ligação transitórias e tenta abrir a ligação até cinco vezes.

Pré-requisitos

  • Microsoft. Data.SqlClient 3.0 ou uma versão posterior.
  • Uma cadeia de ligação para SQL Server, Base de Dados SQL do Azure, Azure SQL Managed Instance ou uma base de dados SQL no Microsoft Fabric.

Configurar um mecanismo de repetição de tentativas de ligação

  1. Defina as opções de retentativa. Deixe TransientErrors como null para que o fornecedor use a lista de erros transitórios incorporada.

    // 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. Crie um fornecedor a partir das opções.

    // Create a retry logic provider
    SqlRetryLogicBaseProvider provider = SqlConfigurableRetryFactory.CreateExponentialRetryProvider(options);
    
  3. Atribua o provedor antes de abrir a conexão.

    // 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 permite uma tentativa inicial e até quatro tentativas. O fornecedor exponencial aumenta o intervalo entre tentativas e adiciona o jitter aleatório. MaxTimeInterval limita cada atraso individual, não o tempo total decorrido para todas as tentativas.

Configurar repetições do comando

Crie um fornecedor separado e atribua-o a SqlCommand.RetryLogicProvider. Defina SqlRetryLogicOption.AuthorizedSqlCondition para um predicado que retorne true apenas para comandos que a sua aplicação possa repetir em segurança.

Caution

Um fornecedor incorporado não tenta novamente um comando quando a ligação tem uma transação ativa. Se uma falha transitória invalidar uma transação, reverta e tente novamente toda a transação. Não volte a tentar apenas a afirmação falhada.

A definição de SqlRetryLogicOption.TransientErrors substitui a lista de erros integrada do controlador. Para estender a linha de base sem perder os predefinidos, veja Estender a lista de erros transitórios incorporada.