SQL-Verbindungsfehler X++-Ausnahme

Hinweis

Gemeinschaftsinteressengruppen sind inzwischen von Yammer zu Microsoft Viva Engage gewechselt. Um einer Viva Engage Community beizutreten und an den neuesten Diskussionen teilzunehmen, füllen Sie das Formular Request access to Finance and Operations Viva Engage Community aus und wählen Sie die Community aus, der Sie beitreten möchten.

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

TransientSqlConnectionError X++-Ausnahme

Während einer X++-SQL-Abfrage tritt bei einem vorübergehenden SQL-Verbindungsfehler auf der Serverseite eine TransientSqlConnectionError X++-Ausnahme auf. Abhängig von den Anwendungsanforderungen sollte die Anwendung die Ausnahme abfangen und behandeln.

Diese Ausnahme tritt in der Regel während einer großen Transaktion auf oder wenn die Datenbank unter hohem Verarbeitungsdruck steht.

Du kannst die TransientSqlConnectionError-Ausnahme innerhalb der Transaktion nicht fangen. Die X++-Transaktion, bei der diese Ausnahme auftritt, wird abgebrochen (Aufruf von ttsAbort), bevor die Ausnahme auftritt. Dieses Verhalten bedeutet, dass man den Catch-Block verwenden muss, um den vorübergehenden SQL-Verbindungsfehler zu identifizieren, anstatt eine generische X++-Fehlerausnahme zu verwenden. Dann versuchen Sie die äußerste Transaktion erneut oder versuchen Sie die Anwendungscode-Logik in einer neuen Sitzung. Mit dieser Ausnahme kann die Anwendung für vorübergehende Serverausfälle konzipiert werden.

Wenn eine Anwendungstransaktion lange verarbeitet wird, verwenden Sie mehrere inkrementelle Verzögerungen, um die TransientSqlConnectionError-Ausnahme zu erkennen. Das erneute Versuch deines Anwendungscodes in einer neuen Sitzung ist höchstwahrscheinlich erfolgreich, nachdem du die Ausnahme erkannt hast.

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