/// <summary>バッチ更新処理を実装</summary> /// <param name="parameterValue">引数クラス</param> private void UOC_BatchUpdate(_3TierParameterValue parameterValue) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 _3TierReturnValue returnValue = new _3TierReturnValue(); this.ReturnValue = returnValue; // ↓業務処理----------------------------------------------------- // 共通Dao CmnDao cmnDao = new CmnDao(this.GetDam()); int i = 0; // 件数のカウント DataTable dt = (DataTable)parameterValue.Obj; // バッチ更新 foreach (DataRow dr in dt.Rows) { switch (dr.RowState) { case DataRowState.Added: // 追加 // SQLを設定して cmnDao.SQLFileName = this.DaoClassNameHeader + parameterValue.TableName + this.DaoClassNameFooter + "_" + this.MethodNameHeaderD + this.MethodLabel_Ins + this.MethodNameFooterD + ".xml"; // パラメタ指定 foreach (DataColumn c in dt.Columns) { // 空文字列も通常の値と同一に扱う cmnDao.SetParameter(c.ColumnName, dr[c]); } // 更新処理を実行 i += cmnDao.ExecInsUpDel_NonQuery(); break; case DataRowState.Modified: // 更新 // SQLを設定して cmnDao.SQLFileName = this.DaoClassNameHeader + parameterValue.TableName + this.DaoClassNameFooter + "_" + this.MethodNameHeaderS + this.MethodLabel_Upd + this.MethodNameFooterS + ".xml"; // パラメタ指定 foreach (DataColumn dc in dt.Columns) { // 主キー・タイムスタンプ列の設定はUP側で。 // また、空文字列も通常の値と同一に扱う。 if (parameterValue.AndEqualSearchConditions.ContainsKey(dc.ColumnName)) { // Where条件は、DataRowVersion.Originalを付与 cmnDao.SetParameter(dc.ColumnName, dr[dc, DataRowVersion.Original]); } else { cmnDao.SetParameter( this.UpdateParamHeader + dc.ColumnName + this.UpdateParamFooter, dr[dc]); } } // 更新処理を実行 i += cmnDao.ExecInsUpDel_NonQuery(); break; case DataRowState.Deleted: // 削除 // SQLを設定して cmnDao.SQLFileName = this.DaoClassNameHeader + parameterValue.TableName + this.DaoClassNameFooter + "_" + this.MethodNameHeaderS + this.MethodLabel_Del + this.MethodNameFooterS + ".xml"; // パラメタ指定 foreach (DataColumn c in dt.Columns) { // 主キー・タイムスタンプ列の設定はUP側で。 // また、空文字列も通常の値と同一に扱う。 if (parameterValue.AndEqualSearchConditions.ContainsKey(c.ColumnName)) { // Where条件は、DataRowVersion.Originalを付与 cmnDao.SetParameter(c.ColumnName, dr[c, DataRowVersion.Original]); } } // 更新処理を実行 i += cmnDao.ExecInsUpDel_NonQuery(); break; default: // 上記以外 // なにもしない。 break; } } // 件数を返却 returnValue.Obj = i; // ↑業務処理----------------------------------------------------- }
/// <summary>1件取得処理を実装</summary> /// <param name="parameterValue">引数クラス</param> private void UOC_SelectRecord(_3TierParameterValue parameterValue) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 _3TierReturnValue returnValue = new _3TierReturnValue(); this.ReturnValue = returnValue; // ↓業務処理----------------------------------------------------- // 共通Dao CmnDao cmnDao = new CmnDao(this.GetDam()); // 検索条件の指定 // AndEqualSearchConditions(主キー foreach (string k in parameterValue.AndEqualSearchConditions.Keys) { // nullチェック(null相当を要検討 if (parameterValue.AndEqualSearchConditions[k] == null) { // == null } else { // != null // 文字列の場合の扱い if (parameterValue.AndEqualSearchConditions[k] is string) { if (!string.IsNullOrEmpty((string)parameterValue.AndEqualSearchConditions[k])) { // パラメタ指定 cmnDao.SetParameter(k, parameterValue.AndEqualSearchConditions[k]); } } else { // パラメタ指定 cmnDao.SetParameter(k, parameterValue.AndEqualSearchConditions[k]); } } } // DataTableをインスタンス化 if (parameterValue.DataTableType == null) { // == null returnValue.Dt = new DataTable(); } else { // != null // 型付きDataTable //(パブリック・デフォルト・コンストラクタ) returnValue.Dt = (DataTable)parameterValue.DataTableType.InvokeMember( null, BindingFlags.CreateInstance, null, null, null); } // SQLを設定して cmnDao.SQLFileName = this.DaoClassNameHeader + parameterValue.TableName + this.DaoClassNameFooter + "_" + this.MethodNameHeaderS + this.MethodLabel_Sel + this.MethodNameFooterS + ".xml"; // パラメタは指定済み // DataTableを取得 cmnDao.ExecSelectFill_DT(returnValue.Dt); // ↑業務処理----------------------------------------------------- }
/// <summary>1件削除処理を実装</summary> /// <param name="parameterValue">引数クラス</param> private void UOC_DeleteRecord(_3TierParameterValue parameterValue) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 _3TierReturnValue returnValue = new _3TierReturnValue(); this.ReturnValue = returnValue; // ↓業務処理----------------------------------------------------- // 共通Dao CmnDao cmnDao = new CmnDao(this.GetDam()); // 検索条件の指定 // AndEqualSearchConditions(主キー foreach (string k in parameterValue.AndEqualSearchConditions.Keys) { // nullチェック(null相当を要検討 if (parameterValue.AndEqualSearchConditions[k] == null) { // == null } else { // != null // 文字列の場合の扱い if (parameterValue.AndEqualSearchConditions[k] is string) { if (!string.IsNullOrEmpty((string)parameterValue.AndEqualSearchConditions[k])) { // パラメタ指定 cmnDao.SetParameter(k, parameterValue.AndEqualSearchConditions[k]); } } else { // パラメタ指定 cmnDao.SetParameter(k, parameterValue.AndEqualSearchConditions[k]); } } } // SQLを設定して cmnDao.SQLFileName = this.DaoClassNameHeader + parameterValue.TableName + this.DaoClassNameFooter + "_" + this.MethodNameHeaderS + this.MethodLabel_Del + this.MethodNameFooterS + ".xml"; // パラメタは指定済み // 削除処理を実行 returnValue.Obj = cmnDao.ExecInsUpDel_NonQuery(); // ↑業務処理----------------------------------------------------- }
/// <summary>データ取得処理を実装</summary> /// <param name="parameterValue">引数クラス</param> private void UOC_SelectMethod(_3TierParameterValue parameterValue) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 _3TierReturnValue returnValue = new _3TierReturnValue(); this.ReturnValue = returnValue; // ↓業務処理----------------------------------------------------- // 共通Dao CmnDao cmnDao = new CmnDao(this.GetDam()); // 検索条件の生成&指定 string whereSQL = this.SetSearchConditions(parameterValue, cmnDao); string selectPagingSqlTemplate = ""; string p = ""; // パラメタ記号 string s = ""; // 囲い記号開始 string e = ""; // 囲い記号終了 // テンプレート、囲い文字の選択 if (parameterValue.DBMSType == DbEnum.DBMSType.SQLServer) { selectPagingSqlTemplate = SELECT_PAGING_SQL_TEMPLATE_SQL_SERVER; p = "@"; s = "["; e = "]"; } else if (parameterValue.DBMSType == DbEnum.DBMSType.Oracle) { selectPagingSqlTemplate = SELECT_PAGING_SQL_TEMPLATE_ORACLE; p = ":"; s = "\""; e = "\""; } else { selectPagingSqlTemplate = SELECT_PAGING_SQL_TEMPLATE_SQL_SERVER; p = "@"; s = "["; e = "]"; } int startRowNum = parameterValue.StartRowIndex + 1; // SQL本体の生成(いろいろ組み込み //(DBMSによって可変となる可能性有り) string selectPagingSQL = string.Format( selectPagingSqlTemplate, new string[] { parameterValue.ColumnList, parameterValue.SortExpression, parameterValue.SortDirection, s + parameterValue.TableName + e , whereSQL, startRowNum.ToString(), (startRowNum + parameterValue.MaximumRows).ToString()} ).Replace("_p_", p).Replace("_s_", s).Replace("_e_", e); // DataTableをインスタンス化 if (parameterValue.DataTableType == null) { // == null returnValue.Dt = new DataTable(); } else { // != null // 型付きDataTable //(パブリック・デフォルト・コンストラクタ) returnValue.Dt = (DataTable)parameterValue.DataTableType.InvokeMember( null, BindingFlags.CreateInstance, null, null, null); } // SQLを設定して cmnDao.SQLText = selectPagingSQL; // パラメタは指定済み // DataTableを取得 cmnDao.ExecSelectFill_DT(returnValue.Dt); // ↑業務処理----------------------------------------------------- }
/// <summary>データ件数取得処理を実装</summary> /// <param name="parameterValue">引数クラス</param> private void UOC_SelectCountMethod(_3TierParameterValue parameterValue) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 _3TierReturnValue returnValue = new _3TierReturnValue(); this.ReturnValue = returnValue; // ↓業務処理----------------------------------------------------- // 共通Dao CmnDao cmnDao = new CmnDao(this.GetDam()); // 検索条件の生成&指定 string whereSQL = this.SetSearchConditions(parameterValue, cmnDao); string p = ""; // パラメタ記号 string s = ""; // 囲い記号開始 string e = ""; // 囲い記号終了 // 囲い文字の選択 if (parameterValue.DBMSType == DbEnum.DBMSType.SQLServer) { p = "@"; s = "["; e = "]"; } else if (parameterValue.DBMSType == DbEnum.DBMSType.Oracle) { p = ":"; s = "\""; e = "\""; } else { p = "@"; s = "["; e = "]"; } // SQLを設定して cmnDao.SQLText = string.Format( SELECT_COUNT_SQL_TEMPLATE, s + parameterValue.TableName + e, whereSQL) .Replace("_p_", p).Replace("_s_", s).Replace("_e_", e); // パラメタは指定済み // データ件数を取得 returnValue.Obj = cmnDao.ExecSelectScalar(); // ↑業務処理----------------------------------------------------- }
/// <summary>業務処理を実装</summary> /// <param name="parameterValue">引数クラス</param> private void UOC_メソッド名(BaseParameterValue parameterValue) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 _3TierReturnValue testReturn = new _3TierReturnValue(); this.ReturnValue = testReturn; // ↓業務処理----------------------------------------------------- // 共通Dao CmnDao cmnDao = new CmnDao(this.GetDam()); cmnDao.ExecSelectScalar(); // ↑業務処理----------------------------------------------------- }
/// <summary>1件追加処理を実装</summary> /// <param name="parameterValue">引数クラス</param> private void UOC_InsertRecord(_3TierParameterValue parameterValue) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 _3TierReturnValue returnValue = new _3TierReturnValue(); this.ReturnValue = returnValue; // 関連チェック処理 this.UOC_RelatedCheck(parameterValue); // ↓業務処理----------------------------------------------------- // 共通Dao CmnDao cmnDao = new CmnDao(this.GetDam()); // 検索条件の指定 // 追加値 // InsertUpdateValues foreach (string k in parameterValue.InsertUpdateValues.Keys) { // nullチェック(null相当を要検討 if (parameterValue.InsertUpdateValues[k] == null) { // == null } else { // != null // 文字列の場合の扱い if (parameterValue.InsertUpdateValues[k] is string) { if (!string.IsNullOrEmpty((string)parameterValue.InsertUpdateValues[k])) { // パラメタ指定 cmnDao.SetParameter(k, parameterValue.InsertUpdateValues[k]); } } else { // パラメタ指定 cmnDao.SetParameter(k, parameterValue.InsertUpdateValues[k]); } } } // SQLを設定して cmnDao.SQLFileName = this.DaoClassNameHeader + parameterValue.TableName + this.DaoClassNameFooter + "_" + this.MethodNameHeaderD + this.MethodLabel_Ins + this.MethodNameFooterD + ".xml"; // パラメタは指定済み // 追加処理を実行 returnValue.Obj = cmnDao.ExecInsUpDel_NonQuery(); // ↑業務処理----------------------------------------------------- }
/// <summary>データ件数取得処理を実装</summary> /// <param name="parameterValue">引数クラス</param> private void UOC_SelectCountMethod(_3TierParameterValue parameterValue) { // 戻り値クラスを生成して、事前に戻り地に設定しておく。 _3TierReturnValue returnValue = new _3TierReturnValue(); this.ReturnValue = returnValue; // ↓業務処理----------------------------------------------------- // 共通Dao CmnDao cmnDao = new CmnDao(this.GetDam()); // 検索条件の生成&指定 string whereSQL = this.SetSearchConditions(parameterValue, cmnDao); string p = ""; // パラメタ記号 string s = ""; // 囲い記号開始 string e = ""; // 囲い記号終了 string f = ""; // For supporting type casting in PostgreSQL // 囲い文字の選択 if (parameterValue.DBMSType == DbEnum.DBMSType.SQLServer) { p = "@"; s = "["; e = "]"; } //MYSQL and DB2 else if (parameterValue.DBMSType == DbEnum.DBMSType.MySQL || parameterValue.DBMSType == DbEnum.DBMSType.DB2) { p = "@"; s = "\""; e = "\""; } else if (parameterValue.DBMSType == DbEnum.DBMSType.Oracle) { p = ":"; s = "\""; e = "\""; } else if (parameterValue.DBMSType == DbEnum.DBMSType.PstGrS) { p = "@"; f = "::text"; } else { p = "@"; s = "["; e = "]"; } if (parameterValue.DBMSType == DbEnum.DBMSType.PstGrS) { //Set the Query for PostgreSQL database cmnDao.SQLText = string.Format( SELECT_COUNT_POSTGRESQL_TEMPLATE, s + parameterValue.TableName + e, whereSQL) .Replace("_p_", p).Replace("_s_", s).Replace("_e_", e).Replace("_f_", f); } //MYSQL else if (parameterValue.DBMSType == DbEnum.DBMSType.MySQL) { string SQLtext = string.Format( SELECT_COUNT_SQL_TEMPLATE, parameterValue.TableName, whereSQL) .Replace("_p_", p).Replace("_s_", s).Replace("_e_", e).Replace("_f_", f).Replace("\"", string.Empty); cmnDao.SQLText = SQLtext; } else { // SQLを設定して And DB2 cmnDao.SQLText = string.Format( SELECT_COUNT_SQL_TEMPLATE, s + parameterValue.TableName + e, whereSQL) .Replace("_p_", p).Replace("_s_", s).Replace("_e_", e).Replace("_f_", f); } // パラメタは指定済み // データ件数を取得 returnValue.Obj = cmnDao.ExecSelectScalar(); // ↑業務処理----------------------------------------------------- }