以下のエラー事象が発生した場合は、データベースの切り替えが発生した可能性があります。この場合、コネクションの再接続を行って、トランザクションを再実行してください。
NpgsqlExceptionの属性Codeに"57P01"が返却される。
NpgsqlExceptionの属性Codeに空文字列が返却される。
NullReferenceExceptionが発生する。
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);