Example #1
0
        /// <summary>主キー一覧を取得</summary>
        /// <param name="parameter">引数クラス</param>
        private void UOC_SelectPkList(VoidParameterValue parameter)
        {
            // 戻り値クラスを生成して、事前に戻り値に設定しておく。
            SelectPkListReturnValue returnValue = new SelectPkListReturnValue();

            this.ReturnValue = returnValue;

            // ↓業務処理-----------------------------------------------------

            DataTable pkTable = new DataTable();

            // ↓DBアクセス-----------------------------------------------------
            // 共通Daoを生成
            CmnDao cmnDao = new CmnDao(this.GetDam());

            // 動的SQLを指定
            cmnDao.SQLFileName = "SelectAllOrderID.xml";

            // 共通Daoを実行
            cmnDao.ExecSelectFill_DT(pkTable);
            // ↑DBアクセス-----------------------------------------------------

            // 戻り値を設定
            ArrayList pkList = new ArrayList();

            for (int index = 0; index < pkTable.Rows.Count; index++)
            {
                //データテーブルからArrayListに詰め直す
                pkList.Add(pkTable.Rows[index]["OrderID"]);
            }
            returnValue.PkList = pkList;

            // ↑業務処理-----------------------------------------------------
        }
Example #2
0
        /// <summary>Main</summary>
        static void Main(string[] args)
        {
            // コマンドラインをバラす関数がある。
            List <string> valsLst = null;
            Dictionary <string, string> argsDic = null;

            PubCmnFunction.GetCommandArgs('/', out argsDic, out valsLst);

            // 引数クラス値(B層実行用)
            string     screenId   = System.Reflection.Assembly.GetExecutingAssembly().Location;
            string     controlId  = "-";
            string     actionType = "SQL"; // argsDic["/DAP"] + "%" + argsDic["/MODE1"] + "%" + argsDic["/MODE2"] + "%" + argsDic["/EXROLLBACK"];
            MyUserInfo myUserInfo = new MyUserInfo("userName", "ipAddress");

            // B層クラス
            LayerB layerB = new LayerB();

            // ↓B層実行:主キー値を全て検索(ORDER BY 主キー)-----------------------------------------------------

            // 引数クラスを生成
            VoidParameterValue selectPkListParameterValue = new VoidParameterValue(screenId, controlId, "SelectPkList", actionType, myUserInfo);

            // B層呼出し
            SelectPkListReturnValue selectPkReturnValue = (SelectPkListReturnValue)layerB.DoBusinessLogic(selectPkListParameterValue, DbEnum.IsolationLevelEnum.ReadCommitted);

            // 実行結果確認
            if (selectPkReturnValue.ErrorFlag == true)
            {
                // 結果(業務続行可能なエラー)
                string error = "ErrorMessageID:" + selectPkReturnValue.ErrorMessageID + "\r\n";
                error += "ErrorMessage:" + selectPkReturnValue.ErrorMessage + "\r\n";
                error += "ErrorInfo:" + selectPkReturnValue.ErrorInfo + "\r\n";

                Console.WriteLine(error);
                Console.ReadKey();
                return; //バッチ処理終了
            }

            // 戻り値取得
            ArrayList pkList = selectPkReturnValue.PkList;

            // ↑B層実行:主キー値を全て検索(ORDER BY 主キー)-----------------------------------------------------

            int recordCount      = pkList.Count;                                                                                      // 全レコード数
            int initialIndex     = 0;                                                                                                 // 処理開始インデックス ※ todo:リラン時に途中から再開する場合は初期値を変更する
            int transactionCount = Convert.ToInt32(Math.Ceiling(((double)(recordCount - initialIndex)) / INTERMEDIATE_COMMIT_COUNT)); // 更新B層実行回数

            // 性能測定
            // 性能測定 - 開始
            PerformanceRecorder pr = new PerformanceRecorder();

            pr.StartsPerformanceRecord();

            for (int transactionIndex = 0; transactionIndex < transactionCount; transactionIndex++)
            {
                ArrayList subPkList;       // 主キー一覧(1トランザクション分)
                int       subPkStartIndex; // 主キー(1トランザクション分)の開始位置
                int       subPkCount;      // 主キー数(1トランザクション分)

                // 取り出す主キーの開始、数を取得
                subPkStartIndex = initialIndex + (transactionIndex * INTERMEDIATE_COMMIT_COUNT);
                if (subPkStartIndex + INTERMEDIATE_COMMIT_COUNT - 1 > recordCount - 1)
                {
                    subPkCount = (recordCount - initialIndex) % INTERMEDIATE_COMMIT_COUNT;
                }
                else
                {
                    subPkCount = INTERMEDIATE_COMMIT_COUNT;
                }

                // 主キー一覧(1トランザクション分)を取り出す
                subPkList = new ArrayList();
                subPkList.AddRange(pkList.GetRange(subPkStartIndex, subPkCount));

                // ↓B層実行:バッチ処理を実行(1トランザクション分)----------------------------------------------------

                // 引数クラスを生成
                ExecuteBatchProcessParameterValue executeBatchProcessParameterValue = new ExecuteBatchProcessParameterValue(screenId, controlId, "ExecuteBatchProcess", actionType, myUserInfo);
                executeBatchProcessParameterValue.SubPkList = subPkList;

                // B層呼出し
                VoidReturnValue executeBatchProcessReturnValue = (VoidReturnValue)layerB.DoBusinessLogic(executeBatchProcessParameterValue, DbEnum.IsolationLevelEnum.ReadCommitted);

                // 実行結果確認
                if (selectPkReturnValue.ErrorFlag == true)
                {
                    // 結果(業務続行可能なエラー)
                    string error = "ErrorMessageID:" + selectPkReturnValue.ErrorMessageID + "\r\n";
                    error += "ErrorMessage:" + selectPkReturnValue.ErrorMessage + "\r\n";
                    error += "ErrorInfo:" + selectPkReturnValue.ErrorInfo + "\r\n";

                    Console.WriteLine(error);
                    Console.ReadKey();
                    return; // バッチ処理終了
                }

                // ↑B層実行:バッチ処理を実行(1トランザクション分)----------------------------------------------------
            }

            // 性能測定 - 終了
            Console.WriteLine(pr.EndsPerformanceRecord());
            Console.ReadKey();
        }