IDataReader - GetValueAsOrDefault
An IDataReader extension method that gets value as or default.
public static void Main() { const string sql = @"SELECT 1 As IntColumn"; using (var conn = new SqlConnection(FiddleHelper.GetConnectionStringSqlServer())) { using (SqlCommand @this = conn.CreateCommand()) { conn.Open(); @this.CommandText = sql; using (SqlDataReader reader = @this.ExecuteReader()) { while (reader.Read()) { //C# Extension Method: IDataReader - GetValueAsOrDefault var result1 = reader.GetValueAs<int>("IntColumn"); var result2 = reader.GetValueAsOrDefault<int>("UnknownColumn"); int result3 = reader.GetValueAsOrDefault("UnknownColumn", -1); int result4 = reader.GetValueAsOrDefault("UnknownColumn", (dataReader, s) => -2); Console.WriteLine(result1); Console.WriteLine(result2); Console.WriteLine(result3); Console.WriteLine(result4); } } } } }
View Source
using System; using System.Data; public static partial class Extensions { /// <summary> /// An IDataReader extension method that gets value as or default. /// </summary> /// <typeparam name="T">Generic type parameter.</typeparam> /// <param name="this">The @this to act on.</param> /// <param name="index">Zero-based index of the.</param> /// <returns>The value as or default.</returns> public static T GetValueAsOrDefault<T>(this IDataReader @this, int index) { try { return (T) @this.GetValue(index); } catch { return default(T); } } /// <summary> /// An IDataReader extension method that gets value as or default. /// </summary> /// <typeparam name="T">Generic type parameter.</typeparam> /// <param name="this">The @this to act on.</param> /// <param name="index">Zero-based index of the.</param> /// <param name="defaultValue">The default value.</param> /// <returns>The value as or default.</returns> public static T GetValueAsOrDefault<T>(this IDataReader @this, int index, T defaultValue) { try { return (T) @this.GetValue(index); } catch { return defaultValue; } } /// <summary> /// An IDataReader extension method that gets value as or default. /// </summary> /// <typeparam name="T">Generic type parameter.</typeparam> /// <param name="this">The @this to act on.</param> /// <param name="index">Zero-based index of the.</param> /// <param name="defaultValueFactory">The default value factory.</param> /// <returns>The value as or default.</returns> public static T GetValueAsOrDefault<T>(this IDataReader @this, int index, Func<IDataReader, int, T> defaultValueFactory) { try { return (T) @this.GetValue(index); } catch { return defaultValueFactory(@this, index); } } /// <summary> /// An IDataReader extension method that gets value as or default. /// </summary> /// <typeparam name="T">Generic type parameter.</typeparam> /// <param name="this">The @this to act on.</param> /// <param name="columnName">Name of the column.</param> /// <returns>The value as or default.</returns> public static T GetValueAsOrDefault<T>(this IDataReader @this, string columnName) { try { return (T) @this.GetValue(@this.GetOrdinal(columnName)); } catch { return default(T); } } /// <summary> /// An IDataReader extension method that gets value as or default. /// </summary> /// <typeparam name="T">Generic type parameter.</typeparam> /// <param name="this">The @this to act on.</param> /// <param name="columnName">Name of the column.</param> /// <param name="defaultValue">The default value.</param> /// <returns>The value as or default.</returns> public static T GetValueAsOrDefault<T>(this IDataReader @this, string columnName, T defaultValue) { try { return (T) @this.GetValue(@this.GetOrdinal(columnName)); } catch { return defaultValue; } } /// <summary> /// An IDataReader extension method that gets value as or default. /// </summary> /// <typeparam name="T">Generic type parameter.</typeparam> /// <param name="this">The @this to act on.</param> /// <param name="columnName">Name of the column.</param> /// <param name="defaultValueFactory">The default value factory.</param> /// <returns>The value as or default.</returns> public static T GetValueAsOrDefault<T>(this IDataReader @this, string columnName, Func<IDataReader, string, T> defaultValueFactory) { try { return (T) @this.GetValue(@this.GetOrdinal(columnName)); } catch { return defaultValueFactory(@this, columnName); } } }