Eccezione X++ errore di connessione SQL

Note

I gruppi di interesse della community sono ora passati da Yammer a Microsoft Viva Engage. Per partecipare a una community Viva Engage e partecipare alle discussioni più recenti, compilare il modulo Request access to Finance and Operations Viva Engage Community e scegliere la community a cui si vuole partecipare.

Questo articolo descrive i tipi di eccezione di errore di connessione SQL in X++.

Eccezione TransientSqlConnectionError X++

Durante un'esecuzione di query SQL X++, quando si verifica un errore di connessione SQL temporaneo sul lato server, si verifica un'eccezione TransientSqlConnectionError X++. A seconda dei requisiti dell'applicazione, l'applicazione dovrebbe rilevare e gestire l'eccezione.

Questa eccezione si verifica in genere durante una transazione di grandi dimensioni o quando il database è sottoposto a una notevole pressione di elaborazione.

Non è possibile intercettare l'eccezione TransientSqlConnectionError all'interno della transazione. La transazione X++ che incontra questa eccezione viene annullata (chiamando ttsAbort) prima che si verifichi l'eccezione. Questo comportamento significa che è necessario usare il blocco catch per identificare l'errore di connessione SQL temporaneo anziché un'eccezione di errore X++ generica. Ripetere quindi la transazione più esterna o ripetere la logica del codice dell'applicazione in una nuova sessione. Questa eccezione consente di progettare l'applicazione per errori temporanei del server.

Se una transazione dell'applicazione richiede molto tempo per l'elaborazione, usare più ritardi incrementali per intercettare l'eccezione TransientSqlConnectionError. Dopo aver intercettato l'eccezione, è probabile che il nuovo codice dell'applicazione in una nuova sessione abbia esito positivo.

Example

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
    }
}