Exception erreur de connexion SQL X++

Note

Les groupes d’intérêt communautaire sont maintenant passés de Yammer à Microsoft Viva Engage. Pour rejoindre une communauté Viva Engage et participer aux dernières discussions, remplissez le formulaire Demande d’accès à la Communauté Viva Engage Finances et Opérations et choisissez la communauté que vous souhaitez rejoindre.

Cet article décrit les types d’exceptions d’erreur de connexion SQL dans X++.

exception TransientSqlConnectionError X++

Lors d’une exécution d’une requête SQL X++, lorsqu’une erreur de connexion SQL transitoire survient côté serveur, une exception TransientSqlConnectionError X++ survient. Selon les exigences de la demande, celle-ci devrait détecter et gérer l’exception.

Cette exception survient généralement lors d’une grande transaction ou lorsque la base de données subit beaucoup de pression de traitement.

Vous ne pouvez pas détecter l’exception TransientSqlConnectionError dans la transaction. La transaction X++ qui rencontre cette exception est annulée (appelant ttsAbort) avant que l’exception ne se produise. Ce comportement signifie qu’il faut utiliser le bloc de capture pour identifier l’erreur transitoire de connexion SQL au lieu d’une exception générique d’erreur X++. Ensuite, réessayez la transaction la plus externe ou réessayez la logique du code applicatif dans une nouvelle session. Cette exception permet de concevoir l’application pour des défaillances serveurs transitoires.

Si une transaction d’application prend beaucoup de temps à être traitée, utilisez plusieurs délais incrémentaux pour détecter l’exception TransientSqlConnectionError. Réessayer le code de votre application dans une nouvelle session a plus de chances de réussir après avoir détecté l’exception.

Exemple :

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