/// <summary> /// Handle the DBNull instance values returned by a <see cref="IDataReader"/> properly. /// </summary> /// <param name="reader">Provide the <see cref="IDataReader"/> instance</param> /// <param name="fieldIndex">Provide the database field index</param> /// <param name="defaultValueIfNull">Provide the value you want to get back, if the original /// value is null or a instance of <seealso cref="DBNull">DBNull</seealso>.</param> /// <returns>Either the provided value parameter itself or the default value.</returns> /// <exception cref="ArgumentNullException">If reader is null</exception> /// <exception cref="IndexOutOfRangeException">If the <paramref name="fieldIndex"/> is out of range</exception> public static string Parse([NotNull] IDataReader reader, int fieldIndex, string defaultValueIfNull = null) { reader.ExceptionIfNull("reader"); var theValue = WrappedGetValueByIndex(reader, fieldIndex); var nullable = DbObjectValueParser.SafeParseString(theValue, fieldIndex); return(nullable ?? defaultValueIfNull); }
/// <summary> /// Handle the DBNull instance values returned by a <see cref="IDataReader"/> properly. /// </summary> /// <param name="reader">Provide the <see cref="IDataReader"/> instance</param> /// <param name="fieldName">Provide the database field name</param> /// <param name="defaultValueIfNull">Provide the value you want to get back, if the original /// value is null or a instance of <seealso cref="DBNull">DBNull</seealso>.</param> /// <returns>Either the provided value parameter itself or the default value.</returns> /// <exception cref="ArgumentNullException">If reader or <paramref name="fieldName"/> is null/empty</exception> /// <exception cref="ArgumentOutOfRangeException">If the <paramref name="fieldName"/> is not member of the resultset</exception> public static string Parse([NotNull] IDataReader reader, [NotNull] string fieldName, string defaultValueIfNull = null) { reader.ExceptionIfNull("reader"); fieldName.ExceptionIfNullOrEmpty("fieldName"); var theValue = WrappedGetValueByName(reader, fieldName); var nullable = DbObjectValueParser.SafeParseString(theValue, fieldName); return(nullable ?? defaultValueIfNull); }
/// <summary> /// Parses the specified value for string content. /// </summary> /// <param name="value">The value.</param> /// <param name="defaultValueIfNull">The default value.</param> /// <returns></returns> public static string ParseValue(object value, string defaultValueIfNull = null) { return(DbObjectValueParser.SafeParseString(value, defaultValueIfNull)); }
private static T SwitchParserByType <T>(object value, object fieldInfo, T defaultValueIfNull) where T : struct { object dv = defaultValueIfNull; // most common types first: switch (Type.GetTypeCode(typeof(T))) { case TypeCode.Int32: { var nullable = DbObjectValueParser.SafeParseNullableInt32(value, fieldInfo); return(nullable.HasValue ? (T)(IConvertible)nullable.Value : defaultValueIfNull); } case TypeCode.Int64: { var nullable = DbObjectValueParser.SafeParseNullableInt64(value, fieldInfo); return(nullable.HasValue ? (T)(IConvertible)nullable.Value : defaultValueIfNull); } case TypeCode.Double: { var nullable = DbObjectValueParser.SafeParseNullableDouble(value, fieldInfo); return(nullable.HasValue ? (T)(IConvertible)nullable.Value : defaultValueIfNull); } case TypeCode.Single: { var nullable = DbObjectValueParser.SafeParseNullableSingle(value, fieldInfo); return(nullable.HasValue ? (T)(IConvertible)nullable.Value : defaultValueIfNull); } case TypeCode.Decimal: { var nullable = DbObjectValueParser.SafeParseNullableDecimal(value, fieldInfo); return(nullable.HasValue ? (T)(IConvertible)nullable.Value : defaultValueIfNull); } case TypeCode.Boolean: { var nullable = DbObjectValueParser.SafeParseNullableBoolean(value, fieldInfo); return(nullable.HasValue ? (T)(IConvertible)nullable.Value : defaultValueIfNull); } case TypeCode.UInt64: { var nullable = DbObjectValueParser.SafeParseNullableUInt64(value, fieldInfo); return(nullable.HasValue ? (T)(IConvertible)nullable.Value : defaultValueIfNull); } case TypeCode.UInt32: { var nullable = DbObjectValueParser.SafeParseNullableUInt32(value, fieldInfo); return(nullable.HasValue ? (T)(IConvertible)nullable.Value : defaultValueIfNull); } case TypeCode.Int16: { var nullable = DbObjectValueParser.SafeParseNullableInt16(value, fieldInfo); return(nullable.HasValue ? (T)(IConvertible)nullable.Value : defaultValueIfNull); } case TypeCode.UInt16: { var nullable = DbObjectValueParser.SafeParseNullableUInt16(value, fieldInfo); return(nullable.HasValue ? (T)(IConvertible)nullable.Value : defaultValueIfNull); } case TypeCode.Byte: { var nullable = DbObjectValueParser.SafeParseNullableByte(value, fieldInfo); return(nullable.HasValue ? (T)(IConvertible)nullable.Value : defaultValueIfNull); } case TypeCode.SByte: { var nullable = DbObjectValueParser.SafeParseNullableSByte(value, fieldInfo); return(nullable.HasValue ? (T)(IConvertible)nullable.Value : defaultValueIfNull); } default: { #pragma warning disable 184 if (typeof(T) is Enum) #pragma warning restore 184 { // ReSharper disable HeuristicUnreachableCode return((T)(IConvertible)DbObjectValueParser.SafeParseEnum(value, (Enum)dv, fieldInfo, false)); // ReSharper restore HeuristicUnreachableCode } if (typeof(T) == typeof(DateTime)) { var nullable = DbObjectValueParser.SafeParseNullableDateTime(value, fieldInfo); return(nullable != null ? (T)(IConvertible)nullable : defaultValueIfNull); } //TODO:?? if (typeof(T) == typeof(DbDate)) { var nullable = DbObjectValueParser.SafeParseNullableDate(value, fieldInfo); return(nullable.HasValue ? (T)(object)nullable.Value : defaultValueIfNull); } if (typeof(T) == typeof(DbTime)) { var nullable = DbObjectValueParser.SafeParseNullableTime(value, fieldInfo); return(nullable.HasValue ? (T)(object)nullable.Value : defaultValueIfNull); } throw new NotImplementedException("SwitchParserByType<" + typeof(T).Name + ">(value) not (yet) implemented"); } } }