ページの先頭行へ戻る
HA Database Ready 業務開発ガイド(Open SQL編)
FUJITSU Integrated System

4.2.3 .NET Data Providerを利用する場合

以下のエラー事象が発生した場合は、データベースの切り替えが発生した可能性があります。この場合、コネクションの再接続を行って、トランザクションを再実行してください。

アプリケーションの記述例
    NpgsqlConnection conn = new NpgsqlConnection(~);
    conn.Open();
    …

    try
    {
        NpgsqlCommand command = new NpgsqlCommand("~", conn);
    }
    catch (NpgsqlException e)
    {
        if (e.Code.Equals("57P01") || e.Code.Equals(""))
        {
            try
            {
                conn.Close();
            }
            catch {}

            // 再接続処理へ
        }
        else
        {
            throw e; //その他のエラー
        }
    }
    catch (NullReferenceException e)
    {
            try
            {
                conn.Close();
            }
            catch {}

            // 再接続処理へ
    }
    catch (Exception e)
    {
        throw e; //その他のエラー
    }

注意

データベースの切り替えが完了するまでは、コネクションの接続がエラー終了し、NpgsqlExceptionの属性Codeが空文字列のエラーが返されます。

アプリケーションの記述例

5秒間隔で20回、再接続をリトライする場合。

    int count = 0;
    NpgsqlConnection conn = new NpgsqlConnection(~);

    do
    {
        count++;
        try
        {
            conn.Open();

            // 再接続完了

        }
        catch (NpgsqlException e)
        {
            if (!e.Code.Equals("") || count> 20)
            {
                throw e; // 再接続失敗
            }
        }
        try
        {
            Thread.Sleep(5000);
        }
        catch (Exception e)
        {
        }
    } while (true);