/// <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(); } }
/// <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(); }
public static void GetCommandArgs(char prefixChar, out Dictionary <string, string> argsDic, out List <string> valsLst) { StringVariableOperator.GetCommandArgs(prefixChar, out argsDic, out valsLst); return; }
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)); } } }