/// <summary> /// <see cref="DbCommand"/>의 Parameter에 값을 설정합니다. /// </summary> /// <param name="db">instance of <see cref="Database"/> defined in DAAB</param> /// <param name="cmd">instance of DbCommand</param> /// <param name="adoParameters">Command Parameter에 설정할 정보</param> public static void SetParameterValues(Database db, DbCommand cmd, params IAdoParameter[] adoParameters) { if (adoParameters.IsEmptySequence()) { return; } // NOTE: output parameter 등의 값을 초기화 해주어야 한다. // InitializeParameterValues(db, cmd); var cmdParamNames = cmd.Parameters.Cast <IDataParameter>().Select(dp => dp.ParameterName.RemoveParameterPrefix()).ToList(); foreach (var p in adoParameters) { var pName = cmdParamNames.FirstOrDefault(cpn => cpn.Compare(p.Name, true) == 0); if (pName.IsNotWhiteSpace()) { db.SetParameterValue(cmd, pName, p.Value); if (IsDebugEnabled) { log.Debug("DbCommand의 파라미터 값을 설정했습니다. parameter=[{0}]", p); } } else { try { if (p.Value != null && p.ValueType == DbType.Object) { p.ValueType = DbFunc.GetDbType(p.Value.GetType()); } if (p.Size.HasValue) { db.AddParameter(cmd, p.Name, p.ValueType, p.Size.Value, p.Direction, true, 0, 0, p.SourceColumn, p.SourceVersion, p.Value); } else { db.AddParameter(cmd, p.Name, p.ValueType, p.Direction, p.SourceColumn, p.SourceVersion, p.Value); } } catch { // NOTE: SQLite에서는 Direction을 지정하지 못합니다. // db.AddInParameter(cmd, p.Name, p.ValueType, p.Value); } if (IsDebugEnabled) { log.Debug("Command에 파라미터를 추가했습니다. parameter=[{0}]", p); } } } }
/// <summary> /// constructor /// </summary> /// <param name="name">parameter name</param> /// <param name="value">parameter value</param> public AdoParameter(string name, object value) : this(name, value, DbFunc.GetDbType((value != null) ? value.GetType() : typeof(object))) { }