/// <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; // ↑業務処理----------------------------------------------------- }
/// <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層実行回数 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トランザクション分)---------------------------------------------------- } }