/// <summary>業務処理を実装</summary> /// <param name="testParameter">引数クラス</param> private void UOC_SelectCount(TestParameterValue testParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 TestReturnValue testReturn = new TestReturnValue(); this.ReturnValue = testReturn; // ↓業務処理----------------------------------------------------- switch ((testParameter.ActionType.Split('%'))[1]) { case "common": // 共通Daoを使用する。 // 共通Daoを生成 CmnDao cmnDao = new CmnDao(this.GetDam()); switch ((testParameter.ActionType.Split('%'))[2]) { case "static": // 静的SQLを指定 cmnDao.SQLFileName = "ShipperCount.sql"; break; case "dynamic": // 動的SQLを指定 cmnDao.SQLFileName = "ShipperCount.xml"; break; } // 共通Daoを実行 // 戻り値を設定 testReturn.Obj = cmnDao.ExecSelectScalar(); break; case "generate": // 自動生成Daoを使用する。 // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // 共通Daoを実行 // 戻り値を設定 testReturn.Obj = genDao.D5_SelCnt(); break; default: // 個別Daoを使用する。 LayerD myDao = new LayerD(this.GetDam()); myDao.SelectCount(testParameter, testReturn); break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(testParameter); }
/// <summary>業務処理を実装</summary> /// <param name="testParameter">引数クラス</param> private void UOC_メソッド名(TestParameterValue testParameter) { //メソッド引数にBaseParameterValueの派生の型を定義可能。 // 戻り値クラスを生成して、事前に戻り地に設定しておく。 TestReturnValue testReturn = new TestReturnValue(); this.ReturnValue = testReturn; // ↓業務処理----------------------------------------------------- // 個別Dao LayerD myDao = new LayerD(this.GetDam()); //myDao.xxxx(testParameter, ref testReturn); // 共通Dao CmnDao cmnDao = new CmnDao(this.GetDam()); cmnDao.ExecSelectScalar(); // ↑業務処理----------------------------------------------------- }
/// <summary>テンプレ</summary> /// <param name="testParameter">引数クラス</param> /// <param name="testReturn">戻り値クラス</param> public void テンプレ(TestParameterValue testParameter, TestReturnValue testReturn) { // ↓DBアクセス----------------------------------------------------- // ● 下記のいづれかの方法でSQLを設定する。 // -- ファイルから読み込む場合。 this.SetSqlByFile2("ファイル名"); // -- 直接指定する場合。 this.SetSqlByCommand("SQL文"); // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 this.SetParameter("P1", testParameter.ShipperID); object obj; // -- 追加、更新、削除の場合(件数を確認できる) obj = this.ExecInsUpDel_NonQuery(); // -- 先頭の1セル分の情報を返すSELECTクエリを実行する場合 obj = this.ExecSelectScalar(); // -- テーブル(or レコード)の情報を返す // SELECTクエリを実行する場合(引数 = データテーブル) obj = new DataTable(); this.ExecSelectFill_DT((DataTable)obj); // -- テーブル(or レコード)の情報を返す // SELECTクエリを実行する場合(引数 = データセット) obj = new DataSet(); this.ExecSelectFill_DS((DataSet)obj); // -- データリーダを返す IDataReader idr = (IDataReader)this.ExecSelect_DR(); // ↑DBアクセス----------------------------------------------------- // 戻り値を設定 testReturn.Obj = obj; }
/// <summary>Insertクエリを実行する</summary> /// <param name="testParameter">引数クラス</param> /// <param name="testReturn">戻り値クラス</param> public void Insert(TestParameterValue testParameter, TestReturnValue testReturn) { // ↓DBアクセス----------------------------------------------------- // -- ファイルから読み込む場合。 this.SetSqlByFile2("ShipperInsert.sql"); // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 this.SetParameter("P2", testParameter.CompanyName); this.SetParameter("P3", testParameter.Phone); object obj; // -- 追加(件数を確認できる) obj = this.ExecInsUpDel_NonQuery(); // ↑DBアクセス----------------------------------------------------- // 戻り値を設定 testReturn.Obj = obj; }
/// <summary>1レコードを返すSELECTクエリを実行する</summary> /// <param name="testParameter">引数クラス</param> /// <param name="testReturn">戻り値クラス</param> public void Select(TestParameterValue testParameter, TestReturnValue testReturn) { // ↓DBアクセス----------------------------------------------------- string filename = ""; if ((testParameter.ActionType.Split('%'))[2] == "static") { // 静的SQL filename = "ShipperSelect.sql"; } else if ((testParameter.ActionType.Split('%'))[2] == "dynamic") { // 動的SQL filename = "ShipperSelect.xml"; } // -- ファイルから読み込む場合。 this.SetSqlByFile2(filename); // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 this.SetParameter("P1", testParameter.ShipperID); // 戻り値 dt DataTable dt = new DataTable(); // -- 1レコードを返すSELECTクエリを実行する this.ExecSelectFill_DT(dt); // ↑DBアクセス----------------------------------------------------- //// 戻り値を設定 // 不要 //testReturn.Obj = dt; // キャストの対策コードを挿入 // ・SQLの場合、ShipperIDのintがInt32型にマップされる。 // ・ODPの場合、ShipperIDのNUMBERがInt64型にマップされる。 // ・DB2の場合、ShipperIDのDECIMALがxxx型にマップされる。 if (dt.Rows[0].ItemArray.GetValue(0).GetType().ToString() == "System.Int32") { // Int32なのでキャスト testReturn.ShipperID = (int)dt.Rows[0].ItemArray.GetValue(0); } else { // それ以外の場合、一度、文字列に変換してInt32.Parseする。 testReturn.ShipperID = int.Parse(dt.Rows[0].ItemArray.GetValue(0).ToString()); } testReturn.CompanyName = (string)dt.Rows[0].ItemArray.GetValue(1); testReturn.Phone = (string)dt.Rows[0].ItemArray.GetValue(2); }
/// <summary>業務処理を実装</summary> /// <param name="testParameter">引数クラス</param> private void UOC_SelectAll_DR(TestParameterValue testParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 TestReturnValue testReturn = new TestReturnValue(); this.ReturnValue = testReturn; // ↓業務処理----------------------------------------------------- DataTable dt = null; switch ((testParameter.ActionType.Split('%'))[1]) { case "common": // 共通Daoを使用する。 // 共通Daoを生成 CmnDao cmnDao = new CmnDao(this.GetDam()); switch ((testParameter.ActionType.Split('%'))[2]) { case "static": // 静的SQLを指定 cmnDao.SQLText = "SELECT * FROM Shippers"; break; case "dynamic": // 動的SQLを指定 cmnDao.SQLText = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><ROOT>SELECT * FROM Shippers</ROOT>"; break; } // 戻り値 dt dt = new DataTable(); // 3列生成 dt.Columns.Add("c1", System.Type.GetType("System.String")); dt.Columns.Add("c2", System.Type.GetType("System.String")); dt.Columns.Add("c3", System.Type.GetType("System.String")); // 共通Daoを実行 IDataReader idr = cmnDao.ExecSelect_DR(); while (idr.Read()) { // DRから読む object[] objArray = new object[3]; idr.GetValues(objArray); // DTに設定する。 DataRow dr = dt.NewRow(); dr.ItemArray = objArray; dt.Rows.Add(dr); } // 終了したらクローズ idr.Close(); // 戻り値を設定 testReturn.Obj = dt; break; case "generate": // 自動生成Daoを使用する。 // DRのI/Fなし // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // 戻り値 dt dt = new DataTable(); // 自動生成Daoを実行 genDao.D2_Select(dt); // 戻り値を設定 testReturn.Obj = (DataTable)dt; break; default: // 個別Daoを使用する。 LayerD myDao = new LayerD(this.GetDam()); myDao.SelectAll_DR(testParameter, testReturn); break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(testParameter); }
/// <summary> /// ShipperId をキーにして Shippers テーブルのレコードを取得する /// </summary> /// <param name="ddlDap">データプロバイダ</param> /// <param name="ddlMode1">静的、動的のクエリ モード(共通Dao選択時)</param> /// <param name="ddlMode2">静的、動的のクエリ モード</param> /// <param name="ddlExRollback">コミット、ロールバック</param> /// <param name="textBox1">ShipperId</param> /// <param name="form">入力フォームの情報</param> /// <returns>再描画(ViewResult)</returns> public ActionResult Select(string ddlDap, string ddlMode1, string ddlMode2, string ddlExRollback, string textBox1, FormCollection form) { // 引数クラスを生成 // 下位(B・D層)は、テスト クラスを流用する TestParameterValue testParameterValue = new TestParameterValue( "CrudMu", "button6", "Select", ddlDap + "%" + ddlMode1 + "%" + ddlMode2 + "%" + ddlExRollback, new MyUserInfo("aaa", "192.168.1.1")); // 動的SQLの要素を設定 testParameterValue.ShipperID = int.Parse(textBox1); // 戻り値 TestReturnValue testReturnValue; // 分離レベルの設定 DbEnum.IsolationLevelEnum iso = DbEnum.IsolationLevelEnum.DefaultTransaction; // B層呼出し+都度コミット LayerB layerB = new LayerB(); testReturnValue = (TestReturnValue)layerB.DoBusinessLogic(testParameterValue, iso); // 結果表示するメッセージ string message = ""; CrudModel model = new CrudModel(); // 値の復元のため、CopyInputValuesを呼び出す。 model.CopyInputValues(form); if (testReturnValue.ErrorFlag == true) { // 結果(業務続行可能なエラー) message = "ErrorMessageID:" + testReturnValue.ErrorMessageID + ";"; message += "ErrorMessage:" + testReturnValue.ErrorMessage + ";"; message += "ErrorInfo:" + testReturnValue.ErrorInfo; // メッセージを設定。 model.Message = message; } else { // 結果(正常系) // 入力フォームの復元値を更新する場合は、model.InputValuesを更新する。 model.InputValues["textBox1"] = testReturnValue.ShipperID.ToString(); model.InputValues["textBox2"] = testReturnValue.CompanyName; model.InputValues["textBox3"] = testReturnValue.Phone; } // Html.BeginFormでは、全体更新。 return View("Index", model); }
/// <summary> /// Shippers テーブルに新規レコードを削除する /// </summary> /// <param name="ddlDap">データプロバイダ</param> /// <param name="ddlMode1">静的、動的のクエリ モード(共通Dao選択時)</param> /// <param name="ddlMode2">静的、動的のクエリ モード</param> /// <param name="ddlExRollback">コミット、ロールバック</param> /// <param name="textBox1">ShipperId</param> /// <returns>Shippers テーブルのレコードを表示するPartialViewResult</returns> public ActionResult Delete(string ddlDap, string ddlMode1, string ddlMode2, string ddlExRollback, string textBox1) { // 引数クラスを生成 // 下位(B・D層)は、テスト クラスを流用する TestParameterValue testParameterValue = new TestParameterValue( "CrudMu", "button9", "Delete", ddlDap + "%" + ddlMode1 + "%" + ddlMode2 + "%" + ddlExRollback, new MyUserInfo("aaa", "192.168.1.1")); // 動的SQLの要素を設定 testParameterValue.ShipperID = int.Parse(textBox1); // 戻り値 TestReturnValue testReturnValue; // 分離レベルの設定 DbEnum.IsolationLevelEnum iso = DbEnum.IsolationLevelEnum.DefaultTransaction; // B層呼出し+都度コミット LayerB layerB = new LayerB(); testReturnValue = (TestReturnValue)layerB.DoBusinessLogic(testParameterValue, iso); // 結果表示するメッセージ string message = ""; if (testReturnValue.ErrorFlag == true) { // 結果(業務続行可能なエラー) message = "ErrorMessageID:" + testReturnValue.ErrorMessageID + ";"; message += "ErrorMessage:" + testReturnValue.ErrorMessage + ";"; message += "ErrorInfo:" + testReturnValue.ErrorInfo; } else { // 結果(正常系) message = testReturnValue.Obj.ToString() + "件削除"; } CrudModel model = new CrudModel() { Message = message }; // Ajax.BeginFormでは、以下のように記述することで部分更新が可能。 return PartialView("_MessageView", model); }
/// <summary> /// Shippers テーブルのレコード全件を、動的 SQL を使用して取得する /// </summary> /// <param name="ddlDap">データプロバイダ</param> /// <param name="ddlMode1">静的、動的のクエリ モード(共通Dao選択時)</param> /// <param name="ddlMode2">静的、動的のクエリ モード</param> /// <param name="ddlExRollback">コミット、ロールバック</param> /// <param name="ddlOrderColumn">並び替え対象列</param> /// <param name="ddlOrderSequence">昇順・降順</param> /// <returns>Shippers テーブルのレコードを表示するPartialViewResult</returns> public ActionResult SelectAll_DSQL(string ddlDap, string ddlMode1, string ddlMode2, string ddlExRollback, string ddlOrderColumn, string ddlOrderSequence) { // 引数クラスを生成 // 下位(B・D層)は、テスト クラスを流用する TestParameterValue testParameterValue = new TestParameterValue( "CrudMu", "button5", "SelectAll_DSQL", ddlDap + "%" + ddlMode1 + "%" + ddlMode2 + "%" + ddlExRollback, new MyUserInfo("aaa", "192.168.1.1")); // 動的SQLの要素を設定 testParameterValue.OrderColumn = ddlOrderColumn; testParameterValue.OrderSequence = ddlOrderSequence; // 戻り値 TestReturnValue testReturnValue; // 分離レベルの設定 DbEnum.IsolationLevelEnum iso = DbEnum.IsolationLevelEnum.DefaultTransaction; // B層呼出し+都度コミット LayerB layerB = new LayerB(); testReturnValue = (TestReturnValue)layerB.DoBusinessLogic(testParameterValue, iso); // 結果表示するメッセージ string message = ""; if (testReturnValue.ErrorFlag == true) { // 結果(業務続行可能なエラー) message = "ErrorMessageID:" + testReturnValue.ErrorMessageID + ";"; message += "ErrorMessage:" + testReturnValue.ErrorMessage + ";"; message += "ErrorInfo:" + testReturnValue.ErrorInfo; // Ajax.BeginFormでは、UpdateTargetIdで指定した // ターゲット以外を更新する場合、JavaScriptでの対応が必要。 // #ここではjQueryを使用している。 string scriptText = "$('#lblMessage').text('" + message + "');"; return JavaScript(scriptText); } else { // 結果(正常系) CrudModel model = new CrudModel(); model.shippers = new DataSets.DsNorthwind.ShippersDataTable(); DataTable dt = (DataTable)testReturnValue.Obj; foreach (DataRow row in dt.Rows) { DataSets.DsNorthwind.ShippersRow srow = model.shippers.NewShippersRow(); srow.ShipperID = int.Parse(row[0].ToString()); srow.CompanyName = row[1].ToString(); srow.Phone = row[2].ToString(); model.shippers.Rows.Add(srow); } // Ajax.BeginFormでは、以下のように記述することで部分更新が可能。 return PartialView("_ChartView", model); } }
/// <summary>業務処理を実装</summary> /// <param name="testParameter">引数クラス</param> private void UOC_Delete(TestParameterValue testParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 TestReturnValue testReturn = new TestReturnValue(); this.ReturnValue = testReturn; // ↓業務処理----------------------------------------------------- switch ((testParameter.ActionType.Split('%'))[1]) { case "common": // 共通Daoを使用する。 // 共通Daoを生成 CmnDao cmnDao = new CmnDao(this.GetDam()); switch ((testParameter.ActionType.Split('%'))[2]) { case "static": // 静的SQLを指定 cmnDao.SQLFileName = "ShipperDelete.sql"; break; case "dynamic": // 動的SQLを指定 cmnDao.SQLFileName = "ShipperDelete.xml"; break; } // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 cmnDao.SetParameter("P1", testParameter.ShipperID); // 共通Daoを実行 // 戻り値を設定 testReturn.Obj = cmnDao.ExecInsUpDel_NonQuery(); break; case "generate": // 自動生成Daoを使用する。 // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // パラメタに対して、動的に値を設定する。 genDao.PK_ShipperID = testParameter.ShipperID; // 自動生成Daoを実行 // 戻り値を設定 testReturn.Obj = genDao.S4_Delete(); break; default: // 個別Daoを使用する。 LayerD myDao = new LayerD(this.GetDam()); myDao.Delete(testParameter, testReturn); break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(testParameter); }
/// <summary>業務処理を実装</summary> /// <param name="testParameter">引数クラス</param> private void UOC_Insert(TestParameterValue testParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 TestReturnValue testReturn = new TestReturnValue(); this.ReturnValue = testReturn; // ↓業務処理----------------------------------------------------- switch ((testParameter.ActionType.Split('%'))[1]) { case "common": // 共通Daoを使用する。 // 共通Daoを生成 CmnDao cmnDao = new CmnDao(this.GetDam()); cmnDao.SQLFileName = "ShipperInsert.sql"; // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 cmnDao.SetParameter("P2", testParameter.CompanyName); cmnDao.SetParameter("P3", testParameter.Phone); // 共通Daoを実行 // 戻り値を設定 testReturn.Obj = cmnDao.ExecInsUpDel_NonQuery(); break; case "generate": // 自動生成Daoを使用する。 // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // パラメタに対して、動的に値を設定する。 genDao.CompanyName = testParameter.CompanyName; genDao.Phone = testParameter.Phone; // 自動生成Daoを実行 // 戻り値を設定 testReturn.Obj = genDao.D1_Insert(); break; default: // 個別Daoを使用する。 LayerD myDao = new LayerD(this.GetDam()); myDao.Insert(testParameter, testReturn); break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(testParameter); }
/// <summary>業務処理を実装</summary> /// <param name="testParameter">引数クラス</param> private void UOC_Select(TestParameterValue testParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 TestReturnValue testReturn = new TestReturnValue(); this.ReturnValue = testReturn; // ↓業務処理----------------------------------------------------- DataTable dt = null; switch ((testParameter.ActionType.Split('%'))[1]) { case "common": // 共通Daoを使用する。 // 共通Daoを生成 CmnDao cmnDao = new CmnDao(this.GetDam()); switch ((testParameter.ActionType.Split('%'))[2]) { case "static": // 静的SQLを指定 cmnDao.SQLFileName = "ShipperSelect.sql"; break; case "dynamic": // 動的SQLを指定 cmnDao.SQLFileName = "ShipperSelect.xml"; break; } // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 cmnDao.SetParameter("P1", testParameter.ShipperID); // 戻り値 dt dt = new DataTable(); // 共通Daoを実行 cmnDao.ExecSelectFill_DT(dt); // キャストの対策コードを挿入 // ・SQLの場合、ShipperIDのintがInt32型にマップされる。 // ・ODPの場合、ShipperIDのNUMBERがInt64型にマップされる。 // ・DB2の場合、ShipperIDのDECIMALがxxx型にマップされる。 if (dt.Rows[0].ItemArray.GetValue(0).GetType().ToString() == "System.Int32") { // Int32なのでキャスト testReturn.ShipperID = (int)dt.Rows[0].ItemArray.GetValue(0); } else { // それ以外の場合、一度、文字列に変換してInt32.Parseする。 testReturn.ShipperID = int.Parse(dt.Rows[0].ItemArray.GetValue(0).ToString()); } testReturn.CompanyName = (string)dt.Rows[0].ItemArray.GetValue(1); testReturn.Phone = (string)dt.Rows[0].ItemArray.GetValue(2); break; case "generate": // 自動生成Daoを使用する。 // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // パラメタに対して、動的に値を設定する。 genDao.PK_ShipperID = testParameter.ShipperID; // 戻り値 dt dt = new DataTable(); // 自動生成Daoを実行 genDao.S2_Select(dt); // キャストの対策コードを挿入 // ・SQLの場合、ShipperIDのintがInt32型にマップされる。 // ・ODPの場合、ShipperIDのNUMBERがInt64型にマップされる。 // ・DB2の場合、ShipperIDのDECIMALがxxx型にマップされる。 if (dt.Rows[0].ItemArray.GetValue(0).GetType().ToString() == "System.Int32") { // Int32なのでキャスト testReturn.ShipperID = (int)dt.Rows[0].ItemArray.GetValue(0); } else { // それ以外の場合、一度、文字列に変換してInt32.Parseする。 testReturn.ShipperID = int.Parse(dt.Rows[0].ItemArray.GetValue(0).ToString()); } testReturn.CompanyName = (string)dt.Rows[0].ItemArray.GetValue(1); testReturn.Phone = (string)dt.Rows[0].ItemArray.GetValue(2); break; default: // 個別Daoを使用する。 LayerD myDao = new LayerD(this.GetDam()); myDao.Select(testParameter, testReturn); break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(testParameter); }
/// <summary>業務処理を実装</summary> /// <param name="testParameter">引数クラス</param> private void UOC_SelectAll_DSQL(TestParameterValue testParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 TestReturnValue testReturn = new TestReturnValue(); this.ReturnValue = testReturn; // ↓業務処理----------------------------------------------------- switch ((testParameter.ActionType.Split('%'))[1]) { case "common": // 共通Daoを使用する。 // 共通Daoを生成 CmnDao cmnDao = new CmnDao(this.GetDam()); switch ((testParameter.ActionType.Split('%'))[2]) { case "static": // 静的SQLを指定 cmnDao.SQLFileName = "ShipperSelectOrder.sql"; break; case "dynamic": // 動的SQLを指定 cmnDao.SQLFileName = "ShipperSelectOrder.xml"; break; } // ユーザ定義パラメタに対して、動的に値を設定する。 string orderColumn = ""; string orderSequence = ""; if (testParameter.OrderColumn == "c1") { orderColumn = "ShipperID"; } else if (testParameter.OrderColumn == "c2") { orderColumn = "CompanyName"; } else if (testParameter.OrderColumn == "c3") { orderColumn = "Phone"; } else { } if (testParameter.OrderSequence == "A") { orderSequence = "ASC"; } else if (testParameter.OrderSequence == "D") { orderSequence = "DESC"; } else { } // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 cmnDao.SetParameter("P1", "test"); // ユーザ入力は指定しない。 // ※ 動的SQLのVALタグは、前後の空白をつめることが有るので、 // 必要であれば、前後の空白を明示的に指定する必要がある。 cmnDao.SetUserParameter("COLUMN", " " + orderColumn + " "); cmnDao.SetUserParameter("SEQUENCE", " " + orderSequence + " "); // 戻り値 dt DataTable dt = new DataTable(); // 共通Daoを実行 cmnDao.ExecSelectFill_DT(dt); // 自動生成Daoを実行 testReturn.Obj = dt; break; //case "generate": // 自動生成Daoを使用する。 // // 当該SQLなし // break; default: // 個別Daoを使用する。 LayerD myDao = new LayerD(this.GetDam()); myDao.SelectAll_DSQL(testParameter, testReturn); break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(testParameter); }
/// <summary>Deleteクエリを実行する</summary> /// <param name="testParameter">引数クラス</param> /// <param name="testReturn">戻り値クラス</param> public void Delete(TestParameterValue testParameter, TestReturnValue testReturn) { // ↓DBアクセス----------------------------------------------------- string filename = ""; if ((testParameter.ActionType.Split('%'))[2] == "static") { // 静的SQL filename = "ShipperDelete.sql"; } else if ((testParameter.ActionType.Split('%'))[2] == "dynamic") { // 動的SQL filename = "ShipperDelete.xml"; } // -- ファイルから読み込む場合。 this.SetSqlByFile2(filename); // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 this.SetParameter("P1", testParameter.ShipperID); object obj; // -- 削除(件数を確認できる) obj = this.ExecInsUpDel_NonQuery(); // ↑DBアクセス----------------------------------------------------- // 戻り値を設定 testReturn.Obj = obj; }
/// <summary>ロールバックのテスト</summary> /// <param name="testParameter">引数クラス</param> private void TestRollback(TestParameterValue testParameter) { switch ((testParameter.ActionType.Split('%'))[3]) { case "Business": // 戻り値が見えるか確認する。 ((TestReturnValue)this.ReturnValue).Obj = "戻り値が戻るか?"; // 業務例外のスロー throw new BusinessApplicationException( "ロールバックのテスト", "ロールバックのテスト", "エラー情報"); //break; // 到達できないためコメントアウト case "System": // 戻り値が見えるか確認する。 ((TestReturnValue)this.ReturnValue).Obj = "戻り値が戻るか?"; // システム例外のスロー throw new BusinessSystemException( "ロールバックのテスト", "ロールバックのテスト"); //break; // 到達できないためコメントアウト case "Other": // 戻り値が見えるか確認する。 ((TestReturnValue)this.ReturnValue).Obj = "戻り値が戻るか?"; // その他、一般的な例外のスロー throw new Exception("ロールバックのテスト"); //break; // 到達できないためコメントアウト case "Other-Business": // 戻り値が見えるか確認する。 ((TestReturnValue)this.ReturnValue).Obj = "戻り値が戻るか?"; // その他、一般的な例外(業務例外へ振り替え)のスロー throw new Exception("Other-Business"); //break; // 到達できないためコメントアウト case "Other-System": // 戻り値が見えるか確認する。 ((TestReturnValue)this.ReturnValue).Obj = "戻り値が戻るか?"; // その他、一般的な例外(システム例外へ振り替え)のスロー throw new Exception("Other-System"); //break; // 到達できないためコメントアウト } }
/// <summary>件数情報を返すSELECTクエリを実行する</summary> /// <param name="testParameter">引数クラス</param> /// <param name="testReturn">戻り値クラス</param> public void SelectCount(TestParameterValue testParameter, TestReturnValue testReturn) { // ↓DBアクセス----------------------------------------------------- string filename = ""; if ((testParameter.ActionType.Split('%'))[2] == "static") { // 静的SQL filename = "ShipperCount.sql"; } else if ((testParameter.ActionType.Split('%'))[2] == "dynamic") { // 動的SQL filename = "ShipperCount.xml"; } // -- ファイルから読み込む場合。 this.SetSqlByFile2(filename); object obj; // -- 件数情報を返すSELECTクエリを実行する obj = this.ExecSelectScalar(); // ↑DBアクセス----------------------------------------------------- // 戻り値を設定 testReturn.Obj = obj; }
/// <summary>一覧を返すSELECTクエリを実行する(DS)</summary> /// <param name="testParameter">引数クラス</param> /// <param name="testReturn">戻り値クラス</param> public void SelectAll_DS(TestParameterValue testParameter, TestReturnValue testReturn) { // ↓DBアクセス----------------------------------------------------- string commandText = ""; if ((testParameter.ActionType.Split('%'))[2] == "static") { // 静的SQL commandText = "SELECT * FROM Shippers"; } else if ((testParameter.ActionType.Split('%'))[2] == "dynamic") { // 動的SQL commandText = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><ROOT>SELECT * FROM Shippers</ROOT>"; // 通常、動的SQLをSetSqlByCommandで直接指定するような使い方はしない。 } // -- 直接指定する場合。 this.SetSqlByCommand(commandText); // 戻り値 ds DataSet ds = new DataSet(); // -- 一覧を返すSELECTクエリを実行する this.ExecSelectFill_DS(ds); // ↑DBアクセス----------------------------------------------------- // 戻り値を設定 testReturn.Obj = ds; }
/// <summary> /// ShipperId をキーにして Shippers テーブルのレコードを取得する /// </summary> /// <param name="ddlDap">データプロバイダ</param> /// <param name="ddlMode1">静的、動的のクエリ モード(共通Dao選択時)</param> /// <param name="ddlMode2">静的、動的のクエリ モード</param> /// <param name="ddlExRollback">コミット、ロールバック</param> /// <param name="textBox1">ShipperId</param> /// <returns>Shippers テーブルのレコードを表示するJavaScriptResult</returns> public ActionResult Select(string ddlDap, string ddlMode1, string ddlMode2, string ddlExRollback, string textBox1) { // 引数クラスを生成 // 下位(B・D層)は、テスト クラスを流用する TestParameterValue testParameterValue = new TestParameterValue( "CrudMu", "button6", "Select", ddlDap + "%" + ddlMode1 + "%" + ddlMode2 + "%" + ddlExRollback, new MyUserInfo("aaa", "192.168.1.1")); // 動的SQLの要素を設定 testParameterValue.ShipperID = int.Parse(textBox1); // 戻り値 TestReturnValue testReturnValue; // 分離レベルの設定 DbEnum.IsolationLevelEnum iso = DbEnum.IsolationLevelEnum.DefaultTransaction; // B層呼出し+都度コミット LayerB layerB = new LayerB(); testReturnValue = (TestReturnValue)layerB.DoBusinessLogic(testParameterValue, iso); // 結果表示するメッセージ string message = ""; if (testReturnValue.ErrorFlag == true) { // 結果(業務続行可能なエラー) message = "ErrorMessageID:" + testReturnValue.ErrorMessageID + ";"; message += "ErrorMessage:" + testReturnValue.ErrorMessage + ";"; message += "ErrorInfo:" + testReturnValue.ErrorInfo; CrudModel model = new CrudModel() { Message = message }; // Ajax.BeginFormでは、以下のように記述することで部分更新が可能。 return PartialView("_MessageView", model); } else { // 結果(正常系) // Ajax.BeginFormでは、UpdateTargetIdで指定した // ターゲット以外を更新する場合、JavaScriptでの対応が必要。 // #ここではjQueryを使用している。 string scriptText = string.Format("$('#textBox1').val('{0}');$('#textBox2').val('{1}');$('#textBox3').val('{2}');", testReturnValue.ShipperID, testReturnValue.CompanyName, testReturnValue.Phone); return JavaScript(scriptText); } }
/// <summary>一覧を返すSELECTクエリを実行する(DR)</summary> /// <param name="testParameter">引数クラス</param> /// <param name="testReturn">戻り値クラス</param> public void SelectAll_DR(TestParameterValue testParameter, TestReturnValue testReturn) { // ↓DBアクセス----------------------------------------------------- string commandText = ""; if ((testParameter.ActionType.Split('%'))[2] == "static") { // 静的SQL commandText = "SELECT * FROM Shippers"; } else if ((testParameter.ActionType.Split('%'))[2] == "dynamic") { // 動的SQL commandText = "<?xml version=\"1.0\" encoding=\"shift_jis\" ?><ROOT>SELECT * FROM Shippers</ROOT>"; // 通常、動的SQLをSetSqlByCommandで直接指定するような使い方はしない。 } // -- 直接指定する場合。 this.SetSqlByCommand(commandText); // 戻り値 dt DataTable dt = new DataTable(); // 3列生成 dt.Columns.Add("c1", System.Type.GetType("System.String")); dt.Columns.Add("c2", System.Type.GetType("System.String")); dt.Columns.Add("c3", System.Type.GetType("System.String")); // -- 一覧を返すSELECTクエリを実行する IDataReader idr = (IDataReader)this.ExecSelect_DR(); while (idr.Read()) { // DRから読む object[] objArray = new object[3]; idr.GetValues(objArray); // DTに設定する。 DataRow dr = dt.NewRow(); dr.ItemArray = objArray; dt.Rows.Add(dr); } // 終了したらクローズ idr.Close(); // ↑DBアクセス----------------------------------------------------- // 戻り値を設定 testReturn.Obj = dt; }
/// <summary> /// Shippers テーブルのレコード全件を、動的 SQL を使用して取得する /// </summary> /// <param name="ddlDap">データプロバイダ</param> /// <param name="ddlMode1">静的、動的のクエリ モード(共通Dao選択時)</param> /// <param name="ddlMode2">静的、動的のクエリ モード</param> /// <param name="ddlExRollback">コミット、ロールバック</param> /// <param name="ddlOrderColumn">並び替え対象列</param> /// <param name="ddlOrderSequence">昇順・降順</param> /// <param name="form">入力フォームの情報</param> /// <returns>再描画(ViewResult)</returns> public ActionResult SelectAll_DSQL(string ddlDap, string ddlMode1, string ddlMode2, string ddlExRollback, string ddlOrderColumn, string ddlOrderSequence, FormCollection form) { // 引数クラスを生成 // 下位(B・D層)は、テスト クラスを流用する TestParameterValue testParameterValue = new TestParameterValue( "CrudMu", "button5", "SelectAll_DSQL", ddlDap + "%" + ddlMode1 + "%" + ddlMode2 + "%" + ddlExRollback, new MyUserInfo("aaa", "192.168.1.1")); // 動的SQLの要素を設定 testParameterValue.OrderColumn = ddlOrderColumn; testParameterValue.OrderSequence = ddlOrderSequence; // 戻り値 TestReturnValue testReturnValue; // 分離レベルの設定 DbEnum.IsolationLevelEnum iso = DbEnum.IsolationLevelEnum.DefaultTransaction; // B層呼出し+都度コミット LayerB layerB = new LayerB(); testReturnValue = (TestReturnValue)layerB.DoBusinessLogic(testParameterValue, iso); // 結果表示するメッセージ string message = ""; CrudModel model = new CrudModel(); // 値の復元のため、CopyInputValuesを呼び出す。 model.CopyInputValues(form); if (testReturnValue.ErrorFlag == true) { // 結果(業務続行可能なエラー) message = "ErrorMessageID:" + testReturnValue.ErrorMessageID + ";"; message += "ErrorMessage:" + testReturnValue.ErrorMessage + ";"; message += "ErrorInfo:" + testReturnValue.ErrorInfo; // メッセージを設定。 model.Message = message; } else { // 結果(正常系) model.shippers = new DataSets.DsNorthwind.ShippersDataTable(); DataTable dt = (DataTable)testReturnValue.Obj; foreach (DataRow row in dt.Rows) { DataSets.DsNorthwind.ShippersRow srow = model.shippers.NewShippersRow(); srow.ShipperID = int.Parse(row[0].ToString()); srow.CompanyName = row[1].ToString(); srow.Phone = row[2].ToString(); model.shippers.Rows.Add(srow); } } // Html.BeginFormでは、全体更新。 return View("Index", model); }
/// <summary>一覧を返すSELECTクエリを実行する</summary> /// <param name="testParameter">引数クラス</param> /// <param name="testReturn">戻り値クラス</param> public void SelectAll_DSQL(TestParameterValue testParameter, TestReturnValue testReturn) { // ↓DBアクセス----------------------------------------------------- string filename = ""; if ((testParameter.ActionType.Split('%'))[2] == "static") { // 静的SQL filename = "ShipperSelectOrder.sql"; } else if ((testParameter.ActionType.Split('%'))[2] == "dynamic") { // 動的SQL filename = "ShipperSelectOrder.xml"; } // -- ファイルから読み込む場合。 this.SetSqlByFile2(filename); // ユーザ定義パラメタに対して、動的に値を設定する。 string orderColumn = ""; string orderSequence = ""; if (testParameter.OrderColumn == "c1") { orderColumn = "ShipperID"; } else if (testParameter.OrderColumn == "c2") { orderColumn = "CompanyName"; } else if (testParameter.OrderColumn == "c3") { orderColumn = "Phone"; } else { } if (testParameter.OrderSequence == "A") { orderSequence = "ASC"; } else if (testParameter.OrderSequence == "D") { orderSequence = "DESC"; } else { } // パラメタ ライズド クエリのパラメタに対して、動的に値を設定する。 this.SetParameter("P1", "test"); // ユーザ入力は指定しない。 // ※ 動的SQLのVALタグは、前後の空白をつめることが有るので、 // 必要であれば、前後の空白を明示的に指定する必要がある。 this.SetUserParameter("COLUMN", " " + orderColumn + " "); this.SetUserParameter("SEQUENCE", " " + orderSequence + " "); // 戻り値 dt DataTable dt = new DataTable(); // -- 一覧を返すSELECTクエリを実行する this.ExecSelectFill_DT(dt); // ↑DBアクセス----------------------------------------------------- // 戻り値を設定 testReturn.Obj = dt; }
/// <summary> /// Shippers テーブルのレコード数をカウントする /// </summary> /// <param name="ddlDap">データプロバイダ</param> /// <param name="ddlMode1">静的、動的のクエリ モード(共通Dao選択時)</param> /// <param name="ddlMode2">静的、動的のクエリ モード</param> /// <param name="ddlExRollback">コミット、ロールバック</param> /// <param name="form">入力フォームの情報</param> /// <returns>再描画(ViewResult)</returns> public ActionResult GetCount(string ddlDap, string ddlMode1, string ddlMode2, string ddlExRollback, FormCollection form) { // 引数クラスを生成 // 下位(B・D層)は、テスト クラスを流用する TestParameterValue testParameterValue = new TestParameterValue( "CrudMu", "button1", "SelectCount", ddlDap + "%" + ddlMode1 + "%" + ddlMode2 + "%" + ddlExRollback, new MyUserInfo("aaa", "192.168.1.1")); // 戻り値 TestReturnValue testReturnValue; // 分離レベルの設定 DbEnum.IsolationLevelEnum iso = DbEnum.IsolationLevelEnum.DefaultTransaction; // B層呼出し+都度コミット LayerB layerB = new LayerB(); testReturnValue = (TestReturnValue)layerB.DoBusinessLogic(testParameterValue, iso); // 結果表示するメッセージ string message = ""; CrudModel model = new CrudModel(); // 値の復元のため、CopyInputValuesを呼び出す。 model.CopyInputValues(form); if (testReturnValue.ErrorFlag == true) { // 結果(業務続行可能なエラー) message = "ErrorMessageID:" + testReturnValue.ErrorMessageID + ";"; message += "ErrorMessage:" + testReturnValue.ErrorMessage + ";"; message += "ErrorInfo:" + testReturnValue.ErrorInfo; } else { // 結果(正常系) message = testReturnValue.Obj.ToString() + "件のデータがあります"; } // メッセージを設定。 model.Message = message; // Html.BeginFormでは、全体更新。 return View("Index", model); }
/// <summary>業務処理を実装</summary> /// <param name="testParameter">引数クラス</param> private void UOC_SelectAll_DS(TestParameterValue testParameter) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 TestReturnValue testReturn = new TestReturnValue(); this.ReturnValue = testReturn; // ↓業務処理----------------------------------------------------- DataSet ds = null; switch ((testParameter.ActionType.Split('%'))[1]) { case "common": // 共通Daoを使用する。 // 共通Daoを生成 CmnDao cmnDao = new CmnDao(this.GetDam()); switch ((testParameter.ActionType.Split('%'))[2]) { case "static": // 静的SQLを指定 cmnDao.SQLText = "SELECT * FROM Shippers"; break; case "dynamic": // 動的SQLを指定 cmnDao.SQLText = "<?xml version=\"1.0\" encoding=\"utf-8\" ?><ROOT>SELECT * FROM Shippers</ROOT>"; break; } // 戻り値 ds ds = new DataSet(); // 共通Daoを実行 cmnDao.ExecSelectFill_DS(ds); // 戻り値を設定 testReturn.Obj = ds; break; case "generate": // 自動生成Daoを使用する。 // 自動生成Daoを生成 DaoShippers genDao = new DaoShippers(this.GetDam()); // 戻り値 ds ds = new DataSet(); ds.Tables.Add(new DataTable()); // 自動生成Daoを実行 genDao.D2_Select(ds.Tables[0]); // 戻り値を設定 testReturn.Obj = ds; break; default: // 個別Daoを使用する。 LayerD myDao = new LayerD(this.GetDam()); myDao.SelectAll_DS(testParameter, testReturn); break; } // ↑業務処理----------------------------------------------------- // ロールバックのテスト this.TestRollback(testParameter); }