/// <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>追加処理</summary> private void button7_Click(object sender, RoutedEventArgs e) { // 引数クラスを生成 // 下位(B・D層)は、テスト クラスを流用する TestParameterValue testParameterValue = new TestParameterValue( this.Name, ((Button)sender).Name, "Insert", ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, this.myUserInfo); // 情報の設定 testParameterValue.CompanyName = this.textBox2.Text; testParameterValue.Phone = this.textBox3.Text; // 戻り値 TestReturnValue testReturnValue; // Invoke testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( "testWebService", testParameterValue); // 結果表示するメッセージ エリア this.labelMessage.Content = ""; if (testReturnValue.ErrorFlag == true) { // 結果(業務続行可能なエラー) this.labelMessage.Content = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; this.labelMessage.Content += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; this.labelMessage.Content += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; } else { // 結果(正常系) this.labelMessage.Content = testReturnValue.Obj.ToString() + "件追加"; } }
/// <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>業務処理を実装</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_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>削除処理</summary> /// <param name="rcFxEventArgs">イベントハンドラの共通引数</param> protected void UOC_btnButton9_Click(RcFxEventArgs rcFxEventArgs) { // 引数クラスを生成 // 下位(B・D層)は、テスト クラスを流用する TestParameterValue testParameterValue = new TestParameterValue( this.Name, rcFxEventArgs.ControlName, "Delete", ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, MyBaseControllerWin.UserInfo); // 情報の設定 testParameterValue.ShipperID = int.Parse(textBox1.Text); // 戻り値 TestReturnValue testReturnValue; // Invoke testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( "testWebService", testParameterValue); // 結果表示するメッセージ エリア this.labelMessage.Text = ""; if (testReturnValue.ErrorFlag == true) { // 結果(業務続行可能なエラー) this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; } else { // 結果(正常系) this.labelMessage.Text = testReturnValue.Obj.ToString() + "件削除"; } }
/// <summary>一覧取得(動的sql)</summary> /// <param name="rcFxEventArgs">イベントハンドラの共通引数</param> protected void UOC_btnButton5_Click(RcFxEventArgs rcFxEventArgs) { // 引数クラスを生成 // 下位(B・D層)は、テスト クラスを流用する TestParameterValue testParameterValue = new TestParameterValue( this.Name, rcFxEventArgs.ControlName, "SelectAll_DSQL", ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, MyBaseControllerWin.UserInfo); // 動的SQLの要素を設定 testParameterValue.OrderColumn = ((ComboBoxItem)this.ddlOrderColumn.SelectedItem).Value; testParameterValue.OrderSequence = ((ComboBoxItem)this.ddlOrderSequence.SelectedItem).Value; // 戻り値 TestReturnValue testReturnValue; // Invoke testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( "testWebService", testParameterValue); // 結果表示するメッセージ エリア this.labelMessage.Text = ""; if (testReturnValue.ErrorFlag == true) { // 結果(業務続行可能なエラー) this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; } else { // 結果(正常系) this.dataGridView1.DataSource = testReturnValue.Obj; } }
/// <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>一覧を返す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>件数情報を返す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>削除処理</summary> private void button9_Click(object sender, RoutedEventArgs e) { // 引数クラスを生成 // 下位(B・D層)は、テスト クラスを流用する TestParameterValue testParameterValue = new TestParameterValue( this.Name, ((Button)sender).Name, "Delete", ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, this.myUserInfo); // 情報の設定 testParameterValue.ShipperID = int.Parse(textBox1.Text); // 戻り値 TestReturnValue testReturnValue; // Invoke testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); // 結果表示するメッセージ エリア this.labelMessage.Content = ""; if (testReturnValue.ErrorFlag == true) { // 結果(業務続行可能なエラー) labelMessage.Content = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; labelMessage.Content += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; labelMessage.Content += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; } else { // 結果(正常系) labelMessage.Content = testReturnValue.Obj.ToString() + "件削除"; } }
/// <summary>参照処理</summary> /// <remarks> /// 非同期フレームワークを使用してB層の呼び出し処理を非同期化 /// (結果表示にだけ匿名デリゲードを使用するパターン) /// </remarks> private void button6_Click(object sender, RoutedEventArgs e) { // 非同期処理クラスを生成 AsyncFunc af = new AsyncFunc(this); // 引数を纏める TestParameterValue testParameterValue = new TestParameterValue( this.Name, ((Button)sender).Name, "Select", ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, this.myUserInfo); // 情報の設定 testParameterValue.ShipperID = int.Parse(this.textBox1.Text); // 引数を非同期処理クラスに設定 af.Parameter = testParameterValue; // 画面上のデータは退避する(オブジェクトであれば、クローンする。) af.LogicalName = ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value; // 非同期実行するメソッドを指定 // ここは副スレッドから実行されるので注意。 af.AsyncFunc = new BaseAsyncFunc.AsyncFuncDelegate(af.btn6_Exec); // 結果表示のメソッドを指定(匿名デリゲード) // このメソッドは必ず主スレッドで実行される。 af.SetResult = delegate(object retVal) { if (retVal is Exception) { // 例外発生時 MessageBox.Show(retVal.ToString(), "非同期処理で例外発生!"); } else { // 正常時 // 戻り値(キャスト) TestReturnValue testReturnValue = (TestReturnValue)retVal; // 結果表示するメッセージ エリア this.labelMessage.Content = ""; if (testReturnValue.ErrorFlag == true) { // 結果(業務続行可能なエラー) this.labelMessage.Content = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; this.labelMessage.Content += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; this.labelMessage.Content += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; } else { // 結果(正常系) this.textBox1.Text = testReturnValue.ShipperID.ToString(); this.textBox2.Text = testReturnValue.CompanyName; this.textBox3.Text = testReturnValue.Phone; } } }; // 非同期実行する。 if (!af.StartByThreadPool()) { MessageBox.Show("別の非同期処理が実行中です。"); } }
/// <summary>一覧取得(動的sql)</summary> private void button5_Click(object sender, RoutedEventArgs e) { // 引数クラスを生成 // 下位(B・D層)は、テスト クラスを流用する TestParameterValue testParameterValue = new TestParameterValue( this.Name, ((Button)sender).Name, "SelectAll_DSQL", ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, this.myUserInfo); // 動的SQLの要素を設定 testParameterValue.OrderColumn = ((ComboBoxItem)this.ddlOrderColumn.SelectedItem).Value; testParameterValue.OrderSequence = ((ComboBoxItem)this.ddlOrderSequence.SelectedItem).Value; // 戻り値 TestReturnValue testReturnValue; // Invoke testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); // 結果表示するメッセージ エリア this.labelMessage.Content = ""; if (testReturnValue.ErrorFlag == true) { // 結果(業務続行可能なエラー) labelMessage.Content = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; labelMessage.Content += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; labelMessage.Content += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; } else { // 結果(正常系) this.dataGrid1.Columns.Clear(); this.dataGrid1.DataContext = testReturnValue.Obj; } }
/// <summary>一覧取得(ds)</summary> /// <param name="rcFxEventArgs">イベントハンドラの共通引数</param> protected void UOC_btnButton3_Click(RcFxEventArgs rcFxEventArgs) { // 引数クラスを生成 // 下位(B・D層)は、テスト クラスを流用する TestParameterValue testParameterValue = new TestParameterValue( this.Name, rcFxEventArgs.ControlName, "SelectAll_DS", ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, MyBaseControllerWin.UserInfo); // 戻り値 TestReturnValue testReturnValue; // Invoke testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); // 結果表示するメッセージ エリア this.labelMessage.Text = ""; if (testReturnValue.ErrorFlag == true) { // 結果(業務続行可能なエラー) labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; } else { // 結果(正常系) this.dataGridView1.DataSource = ((DataSet)testReturnValue.Obj).Tables[0]; } }
/// <summary>追加処理</summary> /// <param name="rcFxEventArgs">イベントハンドラの共通引数</param> protected void UOC_btnButton7_Click(RcFxEventArgs rcFxEventArgs) { // 引数クラスを生成 // 下位(B・D層)は、テスト クラスを流用する TestParameterValue testParameterValue = new TestParameterValue( this.Name, rcFxEventArgs.ControlName, "Insert", ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, MyBaseControllerWin.UserInfo); // 情報の設定 testParameterValue.CompanyName = this.textBox2.Text; testParameterValue.Phone = this.textBox3.Text; // 戻り値 TestReturnValue testReturnValue; // Invoke testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( ((ComboBoxItem)this.ddlTransmission.SelectedItem).Value, testParameterValue); // 結果表示するメッセージ エリア this.labelMessage.Text = ""; if (testReturnValue.ErrorFlag == true) { // 結果(業務続行可能なエラー) labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; } else { // 結果(正常系) labelMessage.Text = testReturnValue.Obj.ToString() + "件追加"; } }
/// <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>参照処理</summary> /// <param name="rcFxEventArgs">イベントハンドラの共通引数</param> /// <remarks> /// 非同期フレームワークを使用してB層の呼び出し処理を非同期化 /// (結果表示にだけ匿名デリゲードを使用するパターン) /// </remarks> protected void UOC_btnButton6_Click(RcFxEventArgs rcFxEventArgs) { // 非同期処理クラスを生成 AsyncFunc af = new AsyncFunc(this); // 引数クラスを生成 // 下位(B・D層)は、テスト クラスを流用する TestParameterValue testParameterValue = new TestParameterValue( this.Name, rcFxEventArgs.ControlName, "Select", ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, MyBaseControllerWin.UserInfo); // 情報の設定 testParameterValue.ShipperID = int.Parse(this.textBox1.Text); // 引数を非同期処理クラスに設定 af.Parameter = testParameterValue; // 非同期実行するメソッドを指定 // ここは副スレッドから実行されるので注意。 af.AsyncFunc = new BaseAsyncFunc.AsyncFuncDelegate(af.btn6_Exec); // 結果表示のメソッドを指定(匿名デリゲード) // このメソッドは必ず主スレッドで実行される。 af.SetResult = delegate(object retVal) { if (retVal is Exception) { // 例外発生時 MessageBox.Show(retVal.ToString(), "非同期処理で例外発生!"); } else { // 正常時 // 戻り値(キャスト) TestReturnValue testReturnValue = (TestReturnValue)retVal; // 結果表示するメッセージ エリア this.labelMessage.Text = ""; if (testReturnValue.ErrorFlag == true) { // 結果(業務続行可能なエラー) this.labelMessage.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; this.labelMessage.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; this.labelMessage.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; } else { // 結果(正常系) this.textBox1.Text = testReturnValue.ShipperID.ToString(); this.textBox2.Text = testReturnValue.CompanyName; this.textBox3.Text = testReturnValue.Phone; } } }; // 非同期実行する。 if (!af.Start()) { MessageBox.Show("別の非同期処理が実行中です。"); } }
/// <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_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); }
/// <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>業務処理を実装</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 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> /// btnMButton5のクリックイベント(一覧取得(動的sql)) /// </summary> /// <param name="fxEventArgs">イベントハンドラの共通引数</param> /// <returns>URL</returns> protected string UOC_sampleScreen_btnMButton5_Click(FxEventArgs fxEventArgs) { // 引数クラスを生成 // 下位(B・D層)は、テスト クラスを流用する TestParameterValue testParameterValue = new TestParameterValue( this.ContentPageFileNoEx, fxEventArgs.ButtonID, "SelectAll_DSQL", this.ddlDap.SelectedValue + "%" + this.ddlMode1.SelectedValue + "%" + this.ddlMode2.SelectedValue + "%" + this.ddlExRollback.SelectedValue, this.UserInfo); // 動的SQLの要素を設定 testParameterValue.OrderColumn = this.ddlOrderColumn.SelectedValue; testParameterValue.OrderSequence = this.ddlOrderSequence.SelectedValue; // 戻り値 TestReturnValue testReturnValue; // 呼出し制御部品 CallController cctrl = new CallController(this.UserInfo); // Invoke testReturnValue = (TestReturnValue)cctrl.Invoke( this.ddlCmctCtrl.SelectedValue, testParameterValue); // 結果表示するメッセージ エリア Label label = (Label)this.GetMasterWebControl("Label1"); label.Text = ""; if (testReturnValue.ErrorFlag == true) { // 結果(業務続行可能なエラー) label.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; label.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; label.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; } else { // 結果(正常系) this.GridView1.DataSource = testReturnValue.Obj; this.GridView1.DataBind(); } // 画面遷移しないポストバックの場合は、urlを空文字列に設定する return ""; }
/// <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> /// btnMButton1のクリックイベント(件数取得) /// </summary> /// <param name="fxEventArgs">イベントハンドラの共通引数</param> /// <returns>URL</returns> protected string UOC_sampleScreen_btnMButton1_Click(FxEventArgs fxEventArgs) { // 引数クラスを生成 // 下位(B・D層)は、テスト クラスを流用する TestParameterValue testParameterValue = new TestParameterValue( this.ContentPageFileNoEx, fxEventArgs.ButtonID, "SelectCount", this.ddlDap.SelectedValue + "%" + this.ddlMode1.SelectedValue + "%" + this.ddlMode2.SelectedValue + "%" + this.ddlExRollback.SelectedValue, this.UserInfo); // 戻り値 TestReturnValue testReturnValue; // 呼出し制御部品 CallController cctrl = new CallController(this.UserInfo); // Invoke testReturnValue = (TestReturnValue)cctrl.Invoke( this.ddlCmctCtrl.SelectedValue, testParameterValue); // 結果表示するメッセージ エリア Label label = (Label)this.GetMasterWebControl("Label1"); label.Text = ""; if (testReturnValue.ErrorFlag == true) { // 結果(業務続行可能なエラー) label.Text = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; label.Text += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; label.Text += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; } else { // 結果(正常系) label.Text = testReturnValue.Obj.ToString() + "件のデータがあります"; } // 画面遷移しないポストバックの場合は、urlを空文字列に設定する return ""; }
/// <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>一覧取得(ds)</summary> private void button3_Click(object sender, RoutedEventArgs e) { // 引数クラスを生成 // 下位(B・D層)は、テスト クラスを流用する TestParameterValue testParameterValue = new TestParameterValue( this.Name, ((Button)sender).Name, "SelectAll_DS", ((ComboBoxItem)this.ddlDap.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlMode1.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlMode2.SelectedItem).Value + "%" + ((ComboBoxItem)this.ddlExRollback.SelectedItem).Value, this.myUserInfo); // 戻り値 TestReturnValue testReturnValue; // Invoke testReturnValue = (TestReturnValue)this.CallCtrl.Invoke( "testWebService", testParameterValue); // 結果表示するメッセージ エリア this.labelMessage.Content = ""; if (testReturnValue.ErrorFlag == true) { // 結果(業務続行可能なエラー) this.labelMessage.Content = "ErrorMessageID:" + testReturnValue.ErrorMessageID + "\r\n"; this.labelMessage.Content += "ErrorMessage:" + testReturnValue.ErrorMessage + "\r\n"; this.labelMessage.Content += "ErrorInfo:" + testReturnValue.ErrorInfo + "\r\n"; } else { // 結果(正常系) this.dataGrid1.Columns.Clear(); this.dataGrid1.DataContext = ((DataSet)testReturnValue.Obj).Tables[0]; } }