X++ の SQL 接続エラー例外

この記事では、X++ での SQL 接続エラー例外のタイプについて説明します。

TransientSqlConnectionError X++ 例外

X++ SQL クエリの実行中に、サーバー側で一時的な SQL 接続エラーが発生すると、TransientSqlConnectionError X++ 例外が発生します。 アプリケーションの要件に応じて、アプリケーションは例外をキャッチして処理する必要があります。

この例外は通常、大規模なトランザクションの際に、またはデータベースに大きな処理負荷がかかっている場合に発生します。

トランザクション内で TransientSqlConnectionError 例外をキャッチすることはできません。 この例外が検出された X++ トランザクションは、例外が発生する前にキャンセルされます (ttsAbort を呼び出す)。 この動作は、一般的な X++ エラー例外ではなく、catch ブロックを使用して一時的な SQL 接続エラーを識別する必要があることを意味します。 次に、最も外側のトランザクションを再試行するか、新しいセッションでアプリケーション コード ロジックを再試行します。 この例外は、一時的なサーバーの障害時にアプリケーションの設計を許可します。

アプリケーション トランザクションの処理に時間がかかる場合は、複数の増分遅延を使用して TransientSqlConnectionError 例外をキャッチします。 新しいセッションでアプリケーション コードを再試行すると、例外をキャッチした後に成功する可能性が最も高くなります。

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