Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: .NET Framework
.NET
.NET Standard
Questo articolo mostra come creare un provider per tentativi esponenziali e assegnarlo a un SqlConnection. Il provider riprova la connessione in presenza dell'elenco integrato del driver degli errori di connessione temporanei e tenta di aprirla fino a cinque volte.
Prerequisiti
- Microsoft. Data.SqlClient 3.0 o una versione successiva.
- Una stringa di connessione per SQL Server, database SQL di Azure, Istanza gestita di SQL di Azure o un database SQL in Microsoft Fabric.
Configura un provider di ritentativi di connessione
Definisci le opzioni per i nuovi tentativi. Lascia
TransientErrorscomenullin modo che il provider usi la lista di errori transitori integrata.// 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) };Crea un fornitore tra le opzioni.
// Create a retry logic provider SqlRetryLogicBaseProvider provider = SqlConfigurableRetryFactory.CreateExponentialRetryProvider(options);Assegna il fornitore prima di aprire la connessione.
// 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 consente un primo tentativo e fino a quattro tentativi. Il fornitore esponenziale aumenta l'intervallo tra i tentativi e aggiunge jitter casuale.
MaxTimeInterval limita ogni singolo ritardo, non il tempo totale trascorso per tutti i tentativi.
Configura i nuovi tentativi dei comandi
Crea un fornitore separato e assegnalo a SqlCommand.RetryLogicProvider. Imposta SqlRetryLogicOption.AuthorizedSqlCondition su un predicato che restituisce true solo i comandi che la tua applicazione può ripetere in sicurezza.
Caution
Un provider integrato non ritenta un comando quando la connessione ha una transazione attiva. Se un fallimento transitorio invalida una transazione, annulla e riprova l'intera transazione. Non riprovare solo con l'affermazione fallita.
L'impostazione SqlRetryLogicOption.TransientErrors sostituisce l'elenco degli errori integrato del driver. Per estendere la base senza perdere i valori predefiniti, vedi Estendi la lista di errori transitori integrati.