/// <summary>バッチ処理を実行する</summary> /// <param name="parameter">引数クラス</param> private void UOC_ExecuteBatchProcess(ExecuteBatchProcessParameterValue parameter) { // 戻り値クラスを生成して、事前に戻り値に設定しておく。 this.ReturnValue = new VoidReturnValue(); // ↓業務処理----------------------------------------------------- ArrayList pkList = parameter.SubPkList; //主キー一覧(1トランザクション分) DataTable dataTable = new DataTable(); //データ一覧(主キーを元に検索したデータ) //Ordersテーブルからデータを検索する // ↓DBアクセス----------------------------------------------------- // 共通Daoを生成 CmnDao cmnDao = new CmnDao(this.GetDam()); // 動的SQLを指定 cmnDao.SQLFileName = "SelectInOrderID.xml"; // パラメータを設定 cmnDao.SetParameter("OrderID", pkList); // 共通Daoを実行 cmnDao.ExecSelectFill_DT(dataTable); // ↑DBアクセス----------------------------------------------------- //Orders2テーブルに1件ずつ追加する for (int index = 0; index < dataTable.Rows.Count; index++) { DataRow row = dataTable.Rows[index]; //1件分のデータ //todo:編集処理など // ↓DBアクセス----------------------------------------------------- // 自動生成Daoを生成 DaoOrders2 dao = new DaoOrders2(this.GetDam()); // パラメータを設定 dao.PK_OrderID = row["OrderID"]; dao.CustomerID = row["CustomerID"]; dao.EmployeeID = row["EmployeeID"]; dao.OrderDate = row["OrderDate"]; dao.RequiredDate = row["RequiredDate"]; dao.ShippedDate = row["ShippedDate"]; dao.ShipVia = row["ShipVia"]; dao.Freight = row["Freight"]; dao.ShipName = row["ShipName"]; dao.ShipAddress = row["ShipAddress"]; dao.ShipCity = row["ShipCity"]; dao.ShipRegion = row["ShipRegion"]; dao.ShipPostalCode = row["ShipPostalCode"]; dao.ShipCountry = row["ShipCountry"]; // 共通Daoを実行 dao.S1_Insert(); // ↑DBアクセス----------------------------------------------------- } // todo:中間コミット情報をDBに登録 ※最終処理主キー値の登録など // ↑業務処理----------------------------------------------------- }
/// <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トランザクション分)---------------------------------------------------- } }