データベース処理でのエラー処理
データベース処理中のエラー処理について
概要
- C#など
- ホスト言語(T-SQL,PL/SQL)など
- やってはならない事
C#などのエラー処理
トランザクション処理を行う場合、catchブロックは必須。正常ならcommitし例外発生時にrollbackする。
注: rollbackするのは例外時のみ、と言う意味ではない。
サンプル(読取のみ=トランザクションなし)
public List fetchAll(){
Connection connection = ConnectionFactory.GetConnectionByName("default");
connection.open();
try{
TableAccess access = new TableAccess(connection);
List list = access.GetList(null,null); //条件なし、ソートなしで全てのデータ取得
}
finally{
//使用中のリソースの破棄
connection.close();
}
}
サンプル(更新=トランザクションつき)
public int Update(SomeEntity entity){
Connection connection = ConnectionFactory.GetConnectionByName("default");
connection.open();
try{
connection.BeginTransaction();
TableAccess access = new TableAccess(connection);
int result = access.Update(entity); //更新対象データ1件を更新
connection.CommitTransaction();
return result;
}
catch(Exception ex){
connection.RollbackTransaction();
ErrorMessageBuilder builder = ErrorMessageBuilderFactory.GetInstance(ex);
builder.WriteLog();
return 0;
}
finally{
//使用中のリソースの破棄
connection.close();
}
}
やってはならない事
握りつぶさない
public int Update(SomeEntity entity){
Connection connection = ConnectionFactory.GetConnectionByName("default");
connection.open();
try{
connection.BeginTransaction();
TableAccess access = new TableAccess(connection);
int result = access.Update(entity); //更新対象データ1件を更新
connection.CommitTransaction();
return result;
}
catch(Exception ex){
connection.BeginTransaction();
ErrorMessageBuilder builder = ErrorMessageBuilderFactory.GetInstance(ex);
//画面で例外メッセージを表示するためのメッセージを組み立てる
this.message = builder.BuildMessage();
return 0;
}
finally{
//使用中のリソースの破棄
connection.close();
}
}