Exemplo n.º 1
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層実行回数

            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トランザクション分)----------------------------------------------------
            }
        }
Exemplo n.º 2
0
        /// <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テーブルに複数件まとめて追加する。
            StringBuilder sb = new StringBuilder();

            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を実行
                sb.Append(dao.ExecGenerateSQL(
                    "DaoOrders2_S1_Insert.sql", new SQLUtility(DbEnum.DBMSType.SQLServer)) + ";\r\n");

                // ↑DBアクセス-----------------------------------------------------
            }

            // 共通Daoでバッチ更新
            CmnDao cd = new CmnDao(this.GetDam());
            cd.SQLText = sb.ToString();
            cd.ExecInsUpDel_NonQuery();

            // todo:中間コミット情報をDBに登録 ※最終処理主キー値の登録など

            // ↑業務処理-----------------------------------------------------
        }