Beispiel #1
0
 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());
 }
Beispiel #2
0
            //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;
                }
            }
Beispiel #3
0
 public void Rollback(DbConn aDbConn)
 {
     //次の状態に遷移する
     aDbConn.GoToNextState(Rollbacked.GetInstance());
 }
Beispiel #4
0
 public void SemiDispose(bool disposing, DbConn aDbConn)
 {
     //処理なし
 }
Beispiel #5
0
 //SQLを実行する(件数の取得)
 public int ExecCount(DbConn aDbConn
                      , string sql)
 {
     throw new InvalidOperationException(
               "DbConnオブジェクトの無効な状態遷移が発生しました.");
 }
Beispiel #6
0
 public void Rollback(DbConn aDbConn)
 {
     //処理なし
 }
Beispiel #7
0
 public void SemiDispose(bool disposing, DbConn aDbConn)
 {
     throw new InvalidOperationException(
               "DbConnオブジェクトの無効な状態遷移が発生しました.");
 }
Beispiel #8
0
 public void DisposeImp(bool disposing, DbConn aDbConn)
 {
     //次の状態に遷移する
     aDbConn.GoToNextState(Error2.GetInstance());
 }
Beispiel #9
0
 public void Rollback(DbConn aDbConn)
 {
     aDbConn.GoToError1AndThrow(
         new InvalidOperationException("DbConnオブジェクトの無効な状態遷移が発生しました."));
 }
Beispiel #10
0
 public void SemiDispose(bool disposing, DbConn aDbConn)
 {
     aDbConn.GoToError1AndThrow(
         new InvalidOperationException("DbConnオブジェクトの無効な状態遷移が発生しました."));
 }
Beispiel #11
0
 public void DisposeImp(bool disposing, DbConn aDbConn)
 {
     //処理なし
 }
Beispiel #12
0
 //SQLを実行する(結果を返さない)
 public int ExecSql(DbConn aDbConn
                    , string sql
                    , IEnumerable <string> updateTables)
 {
     throw new InvalidOperationException("DbConnオブジェクトの無効な状態遷移が発生しました.");
 }
Beispiel #13
0
 //Select文を実行してその結果をCachedResultsオブジェクトで取得する
 public CachedResults ExecSelectForCache(DbConn aDbConn
                                         , string sql
                                         , IEnumerable <string> usedTables)
 {
     throw new InvalidOperationException("DbConnオブジェクトの無効な状態遷移が発生しました.");
 }
Beispiel #14
0
 public void Rollback(DbConn aDbConn)
 {
     throw new InvalidOperationException("DbConnオブジェクトの無効な状態遷移が発生しました.");
 }
Beispiel #15
0
 public DbConnProxy(DbConn aDbConn)
 {
     _dbConn     = aDbConn;
     _reUseCount = 1;
 }
Beispiel #16
0
 public void SemiDispose(bool disposing, DbConn aDbConn)
 {
     //次の状態に遷移する
     aDbConn.GoToNextState(NoTransaction.GetInstance());
 }