SQL-Verbindungsfehler X++-Ausnahme

Hinweis

Community-Interessensgruppen sind inzwischen von Yammer auf Microsoft Viva Engage umgestiegen. Um an einer Viva Engage-Community teilzunehmen und an den neuesten Diskussionen teilzunehmen, füllen Sie das Formular "Anfordern des Zugriffs auf Finance and Operations Viva Engage Community" aus , und wählen Sie die Community aus, der Sie beitreten möchten.

In diesem Artikel werden die SQL-Verbindungsfehler-Ausnahmetypen in X++ beschrieben.

TransientSqlConnectionError X++ Ausnahme

Wenn während einer X++-SQL-Abfrageausführung ein vorübergehender SQL-Verbindungsfehler auf der Serverseite auftritt, tritt eine TransientSqlConnectionError X++-Ausnahme auf. Abhängig von den Anwendungsanforderungen sollte die Anwendung die Ausnahme abfangen und behandeln.

Diese Ausnahme tritt normalerweise während einer großen Transaktion auf oder wenn die Datenbank einem hohen Verarbeitungsdruck ausgesetzt ist.

Sie können die TransientSqlConnectionError-Ausnahme nicht innerhalb der Transaktion abfangen. Die X++-Transaktion, die auf diese Ausnahme stößt, wird abgebrochen (Aufruf von ttsAbort), bevor die Ausnahme auftritt. Dieses Verhalten bedeutet, dass Sie den Catch-Block verwenden müssen, um den vorübergehenden SQL-Verbindungsfehler anstelle einer generischen X++-Fehler ausnahme zu identifizieren. Wiederholen Sie dann die äußerste Transaktion, oder wiederholen Sie die Anwendungscodelogik in einer neuen Sitzung. Diese Ausnahme ermöglicht, dass die Anwendung für vorübergehende Serverausfälle ausgelegt ist.

Wenn eine Anwendungstransaktion lange dauert, verwenden Sie mehrere inkrementelle Verzögerungen, um die TransientSqlConnectionError-Ausnahme abzufangen. Das Wiederholen des Anwendungscodes in einer neuen Sitzung ist wahrscheinlich erfolgreich, nachdem Sie die Ausnahme erfasst haben.

Beispiel

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