/// <summary> /// Update a specific named parameter with the given value. /// </summary> /// <param name="paramName">The parameter whose value to set</param> /// <param name="paramValue">The value being assigned to the parameter</param> public void SetParameter(string paramName, object paramValue) { FieldMap fm = map != null?map.GetFieldMapFromColumn(paramName) : null; // support setting parameters without using the prefix character if (!cmd.Parameters.Contains(paramName)) { GentleSqlFactory sf = broker.GetSqlFactory(); paramName = sf.GetParameterPrefix() + paramName + sf.GetParameterSuffix(); } Check.Verify(cmd.Parameters.Contains(paramName), Error.NoSuchParameter, paramName); IDataParameter param = (IDataParameter)cmd.Parameters[paramName]; SetParameter(param, paramValue, fm); }
/// <summary> /// <p>Update the statement parameter values using the values from the key.</p> /// <p>Warning! This will erase all parameter values not in the key, so if you /// need to set additional parameters be sure to call this method before /// any calls to SetParameter.</p> /// </summary> /// <param name="key">The key instance containing the parameter values.</param> /// <param name="isUpdateAll">If true all statement parameters will be updated. If the /// key has no value a null value will be assigned.</param> public void SetParameters(Key key, bool isUpdateAll) { Check.VerifyNotNull(key, Error.NullParameter, "key"); GentleSqlFactory sf = broker.GetSqlFactory(); foreach (IDataParameter param in cmd.Parameters) { // strip leading @ character if present string prefix = sf.GetParameterPrefix(); string suffix = sf.GetParameterSuffix(); string paramName = param.ParameterName; if (paramName.StartsWith(prefix)) { paramName = paramName.Substring(prefix.Length, paramName.Length - prefix.Length); } //if needed, strip out the suffix from the paramName/column name if (suffix != "" && paramName.EndsWith(suffix)) { paramName = paramName.Substring(0, paramName.Length - suffix.Length); } FieldMap fm = map.GetFieldMapFromColumn(paramName); // handle special case where parameter is concurrency control column if (fm == null && map.ConcurrencyMap != null && paramName.StartsWith("New") && (paramName.Substring(3, paramName.Length - 3) == map.ConcurrencyMap.ColumnName)) { fm = map.ConcurrencyMap; } // if key contains property names translate parameter name into property name string index = key.isPropertyKeys ? fm.MemberName : paramName; // check if we should set parameter value if (key.ContainsKey(index) || isUpdateAll) { Check.VerifyNotNull(fm, Error.Unspecified, "Could not find a value for the parameter named {0}", index); SetParameter(param, key.ContainsKey(index) ? key[index] : null, fm); } } }