public void SemiDispose(bool disposing, DbConn aDbConn) { //トランザクションを終了する try { //GCによる回収時にはCommitAtFinalizingの設定によりCOMMITまたはROLLBACKする if (disposing || aDbConn._commitAtFinalizing) { aDbConn.Commit(); } else { aDbConn.Rollback(); } } catch (Exception ex) { //GCによる回収時には例外を送出しない if (disposing) { //Error1状態に遷移して例外を再送出する aDbConn.GoToError1AndThrow(ex, true); } } //次の状態に遷移する aDbConn.GoToNextState(NoTransaction.GetInstance()); }
//Select文を実行する(結果を返す) public IResults ExecSelect(DbConn aDbConn , string sql , IEnumerable <string> usedTables , Tran.CacheStrategy aCacheStrategy = Tran.CacheStrategy.UseCache) { //キャッシュが利用可能か判定する IResults aResults = null; if (aCacheStrategy == Tran.CacheStrategy.UseCache || aCacheStrategy == Tran.CacheStrategy.UseCacheIfExists) { aResults = aDbConn._aResultsCache.Find(sql, usedTables); } //キャッシュが利用できない場合、トランザクションを開始する try { if (aResults == null) { //トランザクションを開始する aDbConn.BeginTran(); } } catch (Exception ex) { //Error1状態に遷移して例外を再送出する aDbConn.GoToError1AndThrow(ex); throw; } try { if (aCacheStrategy == Tran.CacheStrategy.UseCache) { if (aResults == null) { //キャッシュの追加 try { aDbConn._aResultsCache.AcquireReaderLock(); //SELECT結果の取得からキャッシュへの格納までを排他制御する aResults = aDbConn._aResultsCache.AddAndFind(sql, usedTables, aDbConn.CreateCachedResults(sql)); } finally { aDbConn._aResultsCache.ReleaseReaderLock(); } //次の状態に遷移する aDbConn.GoToNextState(Transaction.GetInstance()); } return(aResults); } else if (aCacheStrategy == Tran.CacheStrategy.UseCacheIfExists) { if (aResults == null) { //SELECT文を発行する aResults = aDbConn.CreateResults(sql); //次の状態に遷移する aDbConn.GoToNextState(Transaction.GetInstance()); } return(aResults); } else if (aCacheStrategy == Tran.CacheStrategy.NoCache) { //SELECT文を発行する aResults = aDbConn.CreateResults(sql); //次の状態に遷移する aDbConn.GoToNextState(Transaction.GetInstance()); //抽出結果を返す return(aResults); } else { throw new ArgumentOutOfRangeException("aCacheStrategy", "Tran.CacheStrategy型の予期しない値です"); } } catch (Exception ex) { //Error1状態に遷移して例外を再送出する aDbConn.GoToError1AndThrow(ex, true); //Warning対策 throw; } }
public void Rollback(DbConn aDbConn) { //次の状態に遷移する aDbConn.GoToNextState(Rollbacked.GetInstance()); }
public void SemiDispose(bool disposing, DbConn aDbConn) { //処理なし }
//SQLを実行する(件数の取得) public int ExecCount(DbConn aDbConn , string sql) { throw new InvalidOperationException( "DbConnオブジェクトの無効な状態遷移が発生しました."); }
public void Rollback(DbConn aDbConn) { //処理なし }
public void SemiDispose(bool disposing, DbConn aDbConn) { throw new InvalidOperationException( "DbConnオブジェクトの無効な状態遷移が発生しました."); }
public void DisposeImp(bool disposing, DbConn aDbConn) { //次の状態に遷移する aDbConn.GoToNextState(Error2.GetInstance()); }
public void Rollback(DbConn aDbConn) { aDbConn.GoToError1AndThrow( new InvalidOperationException("DbConnオブジェクトの無効な状態遷移が発生しました.")); }
public void SemiDispose(bool disposing, DbConn aDbConn) { aDbConn.GoToError1AndThrow( new InvalidOperationException("DbConnオブジェクトの無効な状態遷移が発生しました.")); }
public void DisposeImp(bool disposing, DbConn aDbConn) { //処理なし }
//SQLを実行する(結果を返さない) public int ExecSql(DbConn aDbConn , string sql , IEnumerable <string> updateTables) { throw new InvalidOperationException("DbConnオブジェクトの無効な状態遷移が発生しました."); }
//Select文を実行してその結果をCachedResultsオブジェクトで取得する public CachedResults ExecSelectForCache(DbConn aDbConn , string sql , IEnumerable <string> usedTables) { throw new InvalidOperationException("DbConnオブジェクトの無効な状態遷移が発生しました."); }
public void Rollback(DbConn aDbConn) { throw new InvalidOperationException("DbConnオブジェクトの無効な状態遷移が発生しました."); }
public DbConnProxy(DbConn aDbConn) { _dbConn = aDbConn; _reUseCount = 1; }
public void SemiDispose(bool disposing, DbConn aDbConn) { //次の状態に遷移する aDbConn.GoToNextState(NoTransaction.GetInstance()); }