共通ドキュメント

データベース処理でのエラー処理

データベース処理中のエラー処理について

概要

  • 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();
	}
}
					
					
フッター