# 共通ドキュメント

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

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

### 概要

- 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();
    	}
    }

フッター