/// <summary> /// Returns <see cref="DBNull"/> /// when needed based on the specified type. /// </summary> /// <typeparam name="TypeOfValue">The specified type.</typeparam> /// <param name="parameterValue">The boxed Parameter of the specified type.</param> /// <param name="returnDbNullForZero">When true, return <see cref="DBNull"/> for numeric values.</param> public static object GetParameterValue <TypeOfValue>(object parameterValue, bool returnDbNullForZero) { object o = parameterValue; Type t = typeof(TypeOfValue); if (parameterValue == null) { o = FrameworkTypeUtility.SqlDatabaseNull(); } else if (t.Equals(typeof(DateTime))) { DateTime dt = (DateTime)parameterValue; //CONVENTION: return DbNull for default DateTime (Jan 1900): if (dt == default(DateTime)) { o = FrameworkTypeUtility.SqlDatabaseNull(); } } else if (t.IsValueType) { if ((default(TypeOfValue).Equals(parameterValue)) && returnDbNullForZero) { o = FrameworkTypeUtility.SqlDatabaseNull(); } } return(o); }
/// <summary> /// Gets the parameter. /// </summary> /// <param name="dbmsCommand">The DBMS command.</param> /// <param name="parameterMeta">The parameter meta.</param> /// <returns></returns> /// <exception cref="ArgumentNullException"> /// dbmsCommand;The expected Data Command is not here. /// or /// parameterMeta;The expected parameter metadata is not here. /// </exception> public static IDataParameter GetParameterFromParameterMetadata(IDbCommand dbmsCommand, DataParameterMetadata parameterMeta) { if (dbmsCommand == null) { throw new ArgumentNullException("dbmsCommand", "The expected Data Command is not here."); } if (parameterMeta == null) { throw new ArgumentNullException("parameterMeta", "The expected parameter metadata is not here."); } IDataParameter param = dbmsCommand.CreateParameter(); param.ParameterName = parameterMeta.ParameterName; param.DbType = parameterMeta.DbType; param.Direction = parameterMeta.ParameterDirection; param.SourceColumn = parameterMeta.SourceColumn; param.SourceVersion = parameterMeta.DataRowVersion; param.Value = parameterMeta.ParameterValue ?? FrameworkTypeUtility.SqlDatabaseNull(); return(param); }
/// <summary> /// Gets an array of objects implementing <see cref="IDataParameter"/>. /// </summary> /// <param name="dbmsCommand">The object implementing <see cref="IDbCommand"/>.</param> /// <param name="parameterCollection">A collection of parameters.</param> /// <returns>Returns an array of objects implementing <see cref="IDataParameter"/>.</returns> /// <remarks> /// Supported collections: /// IEnumerable<IDataParameter> [pass-through] /// IEnumerable<DataParameterMetadata> /// Dictionary<string, object> /// </remarks> public static IDataParameter[] GetParameters(IDbCommand dbmsCommand, IEnumerable parameterCollection) { if (parameterCollection == null) { throw new ArgumentNullException("parameterCollection", "The expected set of parameters is not here."); } var @default = parameterCollection as IEnumerable <IDataParameter>; if (@default != null) { return(parameterCollection.OfType <IDataParameter>().ToArray()); } var m = parameterCollection as IEnumerable <DataParameterMetadata>; if (m != null) { return(m.Select(i => GetParameterFromParameterMetadata(dbmsCommand, i)).ToArray()); } var d = parameterCollection as Dictionary <string, object>; if (d != null) { return(d.Select(i => GetParameter(dbmsCommand, i.Key, i.Value ?? FrameworkTypeUtility.SqlDatabaseNull())).ToArray()); } throw new NotSupportedException(@" The parameter collection is not supported. Supported collections: IEnumerable<IDataParameter> [pass-through] IEnumerable<DataParameterMetadata> Dictionary<string, object> "); }