Ralat sambungan SQL pengecualian X++

Nota

Kumpulan minat komuniti kini telah berpindah daripada Yammer kepada Microsoft Viva Engage. Untuk menyertai komuniti Viva Engage dan mengambil bahagian dalam perbincangan terkini, isi borang Minta akses kepada Kewangan dan Operasi Viva Engage Komuniti dan pilih komuniti yang anda mahu sertai.

Artikel ini menerangkan jenis pengecualian ralat sambungan SQL dalam X++.

Pengecualian TransientSqlConnectionError X++

Semasa pelaksanaan pertanyaan SQL X++, apabila ralat sambungan SQL sementara berlaku pada bahagian pelayan, pengecualian TransientSqlConnectionError X++ berlaku. Bergantung pada keperluan permohonan, aplikasi harus menangkap dan mengendalikan pengecualian.

Pengecualian ini biasanya berlaku semasa transaksi besar atau apabila pangkalan data berada di bawah banyak tekanan pemprosesan.

Anda tidak boleh menangkap pengecualian TransientSqlConnectionError dalam transaksi. Transaksi X++ yang menghadapi pengecualian ini dibatalkan (memanggil ttsAbort) sebelum pengecualian berlaku. Tingkah laku ini bermakna anda perlu menggunakan blok tangkapan untuk mengenal pasti ralat sambungan SQL sementara dan bukannya pengecualian ralat X++ generik. Kemudian, cuba semula transaksi terluar atau cuba semula logik kod aplikasi dalam sesi baharu. Pengecualian ini membolehkan aplikasi direka bentuk untuk kegagalan pelayan sementara.

Jika transaksi aplikasi mengambil masa yang lama untuk diproses, gunakan berbilang kelewatan tambahan untuk menangkap pengecualian TransientSqlConnectionError. Mencuba semula kod aplikasi anda dalam sesi baharu berkemungkinan besar akan berjaya selepas anda menangkap pengecualian.

Contoh

public static void LargeTransactionWrapper()
{
    try
    {
        LargeTransaction();
    }
    catch (Exception::TransientSqlConnectionError)
    {
        info("Caught transient SQL connection error, ttslevel=" + int2Str(appl.ttsLevel()));
        // At this point, transaction is canceled
        // Code that indicates retry is possible
    }
    finally
    {
        // Do clean up
    }
}