Пример #1
0
            //Select文を実行してその結果をCachedResultsオブジェクトで取得する
            public CachedResults ExecSelectForCache(DbConn aDbConn
                                                    , string sql
                                                    , IEnumerable <string> usedTables)
            {
                //キャッシュが利用できない場合、トランザクションを開始する
                try {
                    //トランザクションを開始する
                    aDbConn.BeginTran();
                } catch (Exception ex) {
                    //Error1状態に遷移して例外を再送出する
                    aDbConn.GoToError1AndThrow(ex);
                    throw;
                }

                try {
                    //
                    //ExecSelectForCache()内ではキャッシュの更新はしていないので、排他制御をしない.
                    //
                    //MarkovResultsCacheクラス内でExecSelectForCache()の抽出結果をキャッシュに格納しているので、
                    //MarkovResultsCacheクラス内でロックする.
                    //
                    //SELECT文を発行する
                    CachedResults aResults = aDbConn.CreateCachedResults(sql);
                    //次の状態に遷移する
                    aDbConn.GoToNextState(Transaction.GetInstance());
                    //抽出結果を返す
                    return(aResults);
                } catch (Exception ex) {
                    //Error1状態に遷移して例外を再送出する
                    aDbConn.GoToError1AndThrow(ex, true);
                    //Warning対策
                    throw;
                }
            }
Пример #2
0
            //SQLを実行する(件数の取得)
            public int ExecCount(DbConn aDbConn
                                 , string sql)
            {
                try {
                    //トランザクションを開始する
                    aDbConn.BeginTran();
                } catch (Exception ex) {
                    //Error1状態に遷移して例外を再送出する
                    aDbConn.GoToError1AndThrow(ex);
                    throw;
                }

                try {
                    //SELECT COUNT(*)文を発行する
                    int i = aDbConn.ExecCountImp(sql);
                    //次の状態に遷移する
                    aDbConn.GoToNextState(Transaction.GetInstance());
                    //件数を返す
                    return(i);
                } catch (Exception ex) {
                    //Error1状態に遷移して例外を再送出する
                    aDbConn.GoToError1AndThrow(ex, true);
                    throw;
                }
            }
Пример #3
0
            //SQLを実行する(結果を返さない)
            public int ExecSql(DbConn aDbConn
                               , string sql
                               , IEnumerable <string> updateTables)
            {
                try {
                    //トランザクションを開始する
                    aDbConn.BeginTran();
                } catch (Exception ex) {
                    //Error1状態に遷移して例外を再送出する
                    aDbConn.GoToError1AndThrow(ex);
                    throw;
                }

                try {
                    //SQL文を発行する
                    int i = aDbConn.ExecSqlImp(sql, updateTables);
                    //次の状態に遷移する
                    aDbConn.GoToNextState(Transaction.GetInstance());
                    //件数を返す
                    return(i);
                } catch (Exception ex) {
                    //Error1状態に遷移して例外を再送出する
                    aDbConn.GoToError1AndThrow(ex, true);
                    throw;
                }
            }
Пример #4
0
 //SQLを実行する(件数の取得)
 public int ExecCount(DbConn aDbConn
                      , string sql)
 {
     aDbConn.GoToError1AndThrow(
         new InvalidOperationException("DbConnオブジェクトの無効な状態遷移が発生しました."));
     return(0);
 }
Пример #5
0
 public void DisposeImp(bool disposing, DbConn aDbConn)
 {
     //トランザクションを終了し、DBから切断する
     try {
         //GCによる回収時にはCommitAtFinalizingの設定によりCOMMITまたはROLLBACKする
         if (disposing || aDbConn._commitAtFinalizing)
         {
             aDbConn.Commit();
         }
         else
         {
             aDbConn.Rollback();
         }
         aDbConn.Close();
     } catch (Exception ex) {
         //GCによる回収時には例外を送出しない
         if (disposing)
         {
             //Error1状態に遷移して例外を再送出する
             aDbConn.GoToError1AndThrow(ex, true);
         }
     }
     //次の状態に遷移する
     aDbConn.GoToNextState(End.GetInstance());
 }
Пример #6
0
 //SQLを実行する(結果を返さない)
 public int ExecSql(DbConn aDbConn
                    , string sql
                    , IEnumerable <string> updateTables)
 {
     aDbConn.GoToError1AndThrow(
         new InvalidOperationException("DbConnオブジェクトの無効な状態遷移が発生しました."));
     return(0);
 }
Пример #7
0
 //論理式を評価する
 public bool ExecExp(DbConn aDbConn
                     , string expression
                     , IEnumerable <string> usedTables
                     , Tran.CacheStrategy aCacheStrategy = Tran.CacheStrategy.UseCache)
 {
     aDbConn.GoToError1AndThrow(
         new InvalidOperationException("DbConnオブジェクトの無効な状態遷移が発生しました."));
     return(false);
 }
Пример #8
0
 //Select文を実行してその結果をCachedResultsオブジェクトで取得する
 public CachedResults ExecSelectForCache(DbConn aDbConn
                                         , string sql
                                         , IEnumerable <string> usedTables)
 {
     aDbConn.GoToError1AndThrow(
         new InvalidOperationException("DbConnオブジェクトの無効な状態遷移が発生しました."));
     //Warning対策
     return(null);
 }
Пример #9
0
 //Select文を実行する(結果を返す)
 public IResults ExecSelect(DbConn aDbConn
                            , string sql
                            , IEnumerable <string> usedTables
                            , Tran.CacheStrategy aCacheStrategy = Tran.CacheStrategy.UseCache)
 {
     aDbConn.GoToError1AndThrow(
         new InvalidOperationException("DbConnオブジェクトの無効な状態遷移が発生しました."));
     //Warning対策
     return(null);
 }
Пример #10
0
 public void DisposeImp(bool disposing, DbConn aDbConn)
 {
     //DBから切断する
     try {
         aDbConn.Close();
     } catch (Exception ex) {
         //Error1状態に遷移して例外を再送出する
         aDbConn.GoToError1AndThrow(ex);
     }
     //次の状態に遷移する
     aDbConn.GoToNextState(End.GetInstance());
 }
Пример #11
0
 //Select文を実行する(結果を返す)
 public IResults ExecSelect(DbConn aDbConn
                            , string sql
                            , IEnumerable <string> usedTables
                            , Tran.CacheStrategy aCacheStrategy = Tran.CacheStrategy.UseCache)
 {
     try {
         if (aCacheStrategy == Tran.CacheStrategy.UseCache)
         {
             //キャッシュが利用可能か判定する
             IResults aResults = aDbConn._aResultsCache.Find(sql, usedTables);
             if (aResults == null)
             {
                 //キャッシュの追加
                 try {
                     aDbConn._aResultsCache.AcquireReaderLock();
                     //SELECT結果の取得からキャッシュへの格納までを排他制御する
                     aResults = aDbConn._aResultsCache.AddAndFind(sql, usedTables, aDbConn.CreateCachedResults(sql));
                 } finally {
                     aDbConn._aResultsCache.ReleaseReaderLock();
                 }
             }
             return(aResults);
         }
         else if (aCacheStrategy == Tran.CacheStrategy.UseCacheIfExists)
         {
             //キャッシュが利用可能か判定する
             IResults aResults = aDbConn._aResultsCache.Find(sql, usedTables);
             if (aResults == null)
             {
                 //SELECT文を発行する
                 aResults = aDbConn.CreateResults(sql);
             }
             return(aResults);
         }
         else if (aCacheStrategy == Tran.CacheStrategy.NoCache)
         {
             //SELECT文を発行する
             IResults aResults = aDbConn.CreateResults(sql);
             //抽出結果を返す
             return(aResults);
         }
         else
         {
             throw new ArgumentOutOfRangeException("aCacheStrategy", "Tran.CacheStrategy型の予期しない値です");
         }
     } catch (Exception ex) {
         //Error1状態に遷移して例外を再送出する
         aDbConn.GoToError1AndThrow(ex, true);
         //Warning対策
         return(null);
     }
 }
Пример #12
0
 //SQLを実行する(件数の取得)
 public int ExecCount(DbConn aDbConn
                      , string sql)
 {
     try {
         //SELECT COUNT(*)文を発行する
         int i = aDbConn.ExecCountImp(sql);
         //件数を返す
         return(i);
     } catch (Exception ex) {
         //Error1状態に遷移して例外を再送出する
         aDbConn.GoToError1AndThrow(ex, true);
         throw;
     }
 }
Пример #13
0
 //SQLを実行する(結果を返さない)
 public int ExecSql(DbConn aDbConn
                    , string sql
                    , IEnumerable <string> updateTables)
 {
     try {
         //SQL文を発行する
         int i = aDbConn.ExecSqlImp(sql, updateTables);
         //件数を返す
         return(i);
     } catch (Exception ex) {
         //Error1状態に遷移して例外を再送出する
         aDbConn.GoToError1AndThrow(ex, true);
         throw;
     }
 }
Пример #14
0
 public void Rollback(DbConn aDbConn)
 {
     //トランザクションを取り消す
     try {
         aDbConn.RollbackImp();
     } catch (Exception ex) {
         //ROLLBACKに失敗した場合は再度ROLLBACKを行い、
         //それが成功した場合は正常な処理に復帰する
         try {
             aDbConn.RollbackImp();
         } catch (Exception ex2) {
             //Error1状態に遷移して例外を再送出する
             aDbConn.GoToError1AndThrow(ex2, true);
         }
     }
     //次の状態に遷移する
     aDbConn.GoToNextState(Rollbacked.GetInstance());
 }
Пример #15
0
 //Select文を実行してその結果をCachedResultsオブジェクトで取得する
 public CachedResults ExecSelectForCache(DbConn aDbConn
                                         , string sql
                                         , IEnumerable <string> usedTables)
 {
     try {
         //
         //ExecSelectForCache()内ではキャッシュの更新はしていないので、排他制御をしない.
         //
         //MarkovResultsCacheクラス内でExecSelectForCache()の抽出結果をキャッシュに格納しているので、
         //MarkovResultsCacheクラス内でロックする.
         //
         //SELECT文を発行する
         return(aDbConn.CreateCachedResults(sql));
     } catch (Exception ex) {
         //Error1状態に遷移して例外を再送出する
         aDbConn.GoToError1AndThrow(ex, true);
         //Warning対策
         return(null);
     }
 }
Пример #16
0
 public void SemiDispose(bool disposing, DbConn aDbConn)
 {
     aDbConn.GoToError1AndThrow(
         new InvalidOperationException("DbConnオブジェクトの無効な状態遷移が発生しました."));
 }
Пример #17
0
 public void Rollback(DbConn aDbConn)
 {
     aDbConn.GoToError1AndThrow(
         new InvalidOperationException("DbConnオブジェクトの無効な状態遷移が発生しました."));
 }