コード例 #1
0
        /// <summary>Main</summary>
        static void Main(string[] args)
        {
            ////////////////////////////////////////////////////////////////////////
            // 簡素なサンプルなので、
            // ・多重化(タスク毎、結果セットを分割)
            // ・フェッチ・サイズ(メモリ消費量を抑える)
            // ・コミット・インターバル、リラン
            // 等の考慮が別途必要になることがあります。
            ////////////////////////////////////////////////////////////////////////

            // configの初期化
            GetConfigParameter.InitConfiguration("appsettings.json");

            // コマンドラインをバラす関数がある。
            List <string> valsLst = null;
            Dictionary <string, string> argsDic = null;

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

            // 引数クラスを生成
            // 下位(B・D層)は、テスト クラスを流用する
            TestParameterValue testParameterValue
                = new TestParameterValue(
                      System.Reflection.Assembly.GetExecutingAssembly().Location, "-", "SelectCount",
                      argsDic["/DAP"] + "%"
                      + argsDic["/MODE1"] + "%"
                      + argsDic["/MODE2"] + "%"
                      + argsDic["/EXROLLBACK"],
                      new MyUserInfo("", ""));

            // 戻り値
            TestReturnValue testReturnValue;

            // B層呼出し
            LayerB layerB = new LayerB();

            testReturnValue = (TestReturnValue)layerB.DoBusinessLogic(testParameterValue, DbEnum.IsolationLevelEnum.ReadCommitted);

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

                Console.WriteLine(error);
                Console.ReadKey();
            }
            else
            {
                // 結果(正常系)
                Console.WriteLine(testReturnValue.Obj.ToString() + "件のデータがあります");
                Console.ReadKey();
            }
        }
コード例 #2
0
        /// <summary>Main</summary>
        static void Main(string[] args)
        {
            // コマンドラインをバラす関数がある。
            List <string> valsLst = null;
            Dictionary <string, string> argsDic = null;

            StringVariableOperator.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();
        }
コード例 #3
0
 public static void GetCommandArgs(char prefixChar, out Dictionary <string, string> argsDic, out List <string> valsLst)
 {
     StringVariableOperator.GetCommandArgs(prefixChar, out argsDic, out valsLst);
     return;
 }
コード例 #4
0
        static void Main(string[] args)
        {
            // configの初期化
            GetConfigParameter.InitConfiguration("appsettings.json");

            // コマンドラインをバラす関数がある。
            List <string> valsLst = null;
            Dictionary <string, string> argsDic = null;

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

            if (argsDic.ContainsKey("/SQL"))
            {
                SqlConnection cn = new SqlConnection(GetConfigParameter.GetConnectionString("ConnectionString_SQL"));
                cn.Open();
                SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM SHIPPERS", cn);
                Console.WriteLine("SQL:" + cmd.ExecuteScalar().ToString() + "件");
            }

            if (argsDic.ContainsKey("/ODP"))
            {
                OracleConnection cn = new OracleConnection(GetConfigParameter.GetConnectionString("ConnectionString_ODP"));
                cn.Open();
                OracleCommand cmd = new OracleCommand("SELECT COUNT(*) FROM SHIPPERS", cn);
                Console.WriteLine("ODP:" + cmd.ExecuteScalar().ToString() + "件");
            }

            if (argsDic.ContainsKey("/MCN"))
            {
                MySqlConnection cn = new MySqlConnection(GetConfigParameter.GetConnectionString("ConnectionString_MCN"));
                cn.Open();
                MySqlCommand cmd = new MySqlCommand("SELECT COUNT(*) FROM Shippers", cn);
                Console.WriteLine("MCN:" + cmd.ExecuteScalar().ToString() + "件");
            }

            if (argsDic.ContainsKey("/NPS"))
            {
                NpgsqlConnection cn = new NpgsqlConnection(GetConfigParameter.GetConnectionString("ConnectionString_NPS"));
                cn.Open();
                NpgsqlCommand cmd = new NpgsqlCommand("SELECT COUNT(*) FROM SHIPPERS", cn);
                Console.WriteLine("NPS:" + cmd.ExecuteScalar().ToString() + "件");
            }

            if (argsDic.ContainsKey("/REDIS"))
            {
                ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
                IDatabase             cache = redis.GetDatabase();
                cache.StringSet("key:jp:hello", "こんにちは");
                cache.StringSet("key:jp:goodbye", "さようなら");
                Console.WriteLine(cache.StringGet("key:jp:hello"));
                Console.WriteLine(cache.StringGet("key:jp:goodbye"));
            }

            if (argsDic.ContainsKey("/MONGO"))
            {
                string      connectionString = "mongodb://*****:*****@localhost:27017";
                MongoClient client           = new MongoClient(connectionString);

                IMongoDatabase            db         = client.GetDatabase("testdb");
                IMongoCollection <Person> collection = db.GetCollection <Person>("testtbl");

                // 全ドキュメントの削除
                collection.DeleteMany(FilterDefinition <Person> .Empty);

                // ドキュメントの挿入
                Person person = null;
                person = new Person
                {
                    Name = "Dan",
                    Age  = 18,
                };
                collection.InsertOne(person);
                person = new Person
                {
                    Name = "Bob",
                    Age  = 22,
                };
                collection.InsertOne(person);
                person = new Person
                {
                    Name = "John",
                    Age  = 30,
                };
                collection.InsertOne(person);

                // ドキュメントの参照
                var persons = collection.Find(FilterDefinition <Person> .Empty).ToList();

                foreach (Person _person in persons)
                {
                    Console.WriteLine(JsonConvert.SerializeObject(_person));
                }
            }
        }