Konfigurasikan logika retry di SqlClient

Berlaku untuk: .NET Framework .NET .NET Standard

Mengunduh ADO.NET

Artikel ini menunjukkan cara membuat penyedia percobaan ulang eksponensial dan menetapkannya ke sebuah SqlConnection. Penyedia mencoba ulang daftar kesalahan koneksi sementara bawaan driver dan mencoba membuka koneksi hingga lima kali.

Prasyarat

  • Microsoft. Data.SqlClient 3.0 atau versi yang lebih baru.
  • Sebuah string koneksi untuk SQL Server, Azure SQL Database, Azure SQL Managed Instance, atau database SQL di Microsoft Fabric.

Konfigurasikan penyedia percobaan ulang koneksi

  1. Tentukan opsi percobaan ulang. Biarkan TransientErrors sebagai null agar penyedia menggunakan daftar kesalahan transien bawaan.

    // 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. Buat penyedia dari opsi yang ada.

    // Create a retry logic provider
    SqlRetryLogicBaseProvider provider = SqlConfigurableRetryFactory.CreateExponentialRetryProvider(options);
    
  3. Tetapkan penyedia sebelum membuka koneksi.

    // 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 memungkinkan satu percobaan awal dan hingga empat kali percobaan. Penyedia eksponensial meningkatkan interval antar percobaan dan menambahkan jitter acak. MaxTimeInterval membatasi setiap penundaan secara individual, bukan total waktu yang berlalu untuk semua percobaan.

Konfigurasikan percobaan ulang perintah

Buat penyedia terpisah dan tetapkan ke SqlCommand.RetryLogicProvider. Atur SqlRetryLogicOption.AuthorizedSqlCondition ke predikat yang mengembalikan nilai true hanya untuk perintah yang dapat diulangi aplikasi Anda dengan aman.

Caution

Penyedia bawaan tidak mencoba ulang perintah ketika koneksi memiliki transaksi aktif. Jika kegagalan sementara membuat transaksi menjadi tidak valid, lakukan rollback dan coba ulang seluruh transaksi. Jangan ulangi hanya pernyataan yang gagal.

Pengaturan SqlRetryLogicOption.TransientErrors menggantikan daftar kesalahan bawaan driver. Untuk memperpanjang baseline tanpa kehilangan default, lihat Perluas daftar kesalahan transien bawaan.