GetBoolean(string fieldName), GetDateTime(string fieldName), etc...

 /// <summary>
        /// This method extends the GetBoolean method of the data reader to allow calling by the field name
        /// </summary>
        /// <param name="dataReader">The datareader object we are extending</param>
        /// <param name="fieldName">The field name that we are getting the Boolean value for</param>
        /// <returns></returns>
        public static bool GetBoolean(this IDataReader dataReader, string fieldName) {
            var fieldOrdinal = dataReader.GetOrdinal(fieldName);
            var retVal = false;

            if(!dataReader.IsDBNull(fieldOrdinal)) {
                try {
                    retVal = dataReader.GetBoolean(fieldOrdinal);
                }
                catch(InvalidCastException) {
                    //We will swallow this exception as it's expected if our value has a dataType of bit. 
                    //We will try and handle that by casting to an Int16.
                    //If it fails here, we will allow the exception to get thrown
                    return (dataReader.GetInt16(fieldOrdinal) == 1);
                }

            }

            return retVal;
        }

        /// <summary>
        /// This method extends the GetDateTime method of the data reader to allow calling by the field name
        /// </summary>
        /// <param name="dataReader">The datareader object we are extending</param>
        /// <param name="fieldName">The field name that we are getting the DateTime value for</param>
        /// <param name="defaultValue"></param>
        /// <returns></returns>
        public static DateTime GetDateTime(this IDataReader dataReader, string fieldName, DateTime defaultValue = default(DateTime)) {
            var fieldOrdinal = dataReader.GetOrdinal(fieldName);
            return dataReader.IsDBNull(fieldOrdinal) ? defaultValue : dataReader.GetDateTime(fieldOrdinal);
        }

        /// <summary>
        /// This method extends the GetDecimal method of the data reader to allow calling by the field name
        /// </summary>
        /// <param name="dataReader">The datareader object we are extending</param>
        /// <param name="fieldName">The field name that we are getting the Decimal value for</param>
        /// <param name="defaultValue"></param>
        /// <returns></returns>
        public static Decimal GetDecimal(this IDataReader dataReader, string fieldName, Decimal defaultValue = 0m) {
            var fieldOrdinal = dataReader.GetOrdinal(fieldName);
            return dataReader.IsDBNull(fieldOrdinal) ? defaultValue : dataReader.GetDecimal(fieldOrdinal);
        }

        /// <summary>
        /// This method extends the GetDouble method of the data reader to allow calling by the field name
        /// </summary>
        /// <param name="dataReader">The datareader object we are extending</param>
        /// <param name="fieldName">The field name that we are getting the Double value for</param>
        /// <param name="defaultValue"></param>
        /// <returns></returns>
        public static double GetDouble(this IDataReader dataReader, string fieldName, double defaultValue = 0d) {
            var fieldOrdinal = dataReader.GetOrdinal(fieldName);
            return dataReader.IsDBNull(fieldOrdinal) ? defaultValue : dataReader.GetDouble(fieldOrdinal);
        }

        /// <summary>
        /// This method extends the GetFloat method of the data reader to allow calling by the field name
        /// </summary>
        /// <param name="dataReader">The datareader object we are extending</param>
        /// <param name="fieldName">The field name that we are getting the Float value for</param>
        /// <param name="defaultValue"></param>
        /// <returns></returns>
        public static float GetFloat(this IDataReader dataReader, string fieldName, float defaultValue = 0f) {
            var fieldOrdinal = dataReader.GetOrdinal(fieldName);
            return dataReader.IsDBNull(fieldOrdinal) ? defaultValue : dataReader.GetFloat(fieldOrdinal);
        }

        /// <summary>
        /// This method extends the GetGuid method of the data reader to allow calling by the field name
        /// </summary>
        /// <param name="dataReader">The datareader object we are extending</param>
        /// <param name="fieldName">The field name that we are getting the Guid value for</param>
        /// <param name="defaultValue"></param>
        /// <returns></returns>
        public static Guid GetGuid(this IDataReader dataReader, string fieldName, Guid defaultValue = default(Guid)) {
            var fieldOrdinal = dataReader.GetOrdinal(fieldName);
            return dataReader.IsDBNull(fieldOrdinal) ? defaultValue : dataReader.GetGuid(fieldOrdinal);
        }

        /// <summary>
        /// This method extends the GetInt16 method of the data reader to allow calling by the field name
        /// </summary>
        /// <param name="dataReader">The datareader object we are extending</param>
        /// <param name="fieldName">The field name that we are getting the Int16 value for</param>
        /// <param name="defaultValue"></param>
        /// <returns></returns>
        public static Int16 GetInt16(this IDataReader dataReader, string fieldName, Int16 defaultValue) {
            var fieldOrdinal = dataReader.GetOrdinal(fieldName);
            return dataReader.IsDBNull(fieldOrdinal) ? defaultValue : dataReader.GetInt16(fieldOrdinal);
        }

        /// <summary>
        /// This method extends the GetInt32 method of the data reader to allow calling by the field name
        /// </summary>
        /// <param name="dataReader">The datareader object we are extending</param>
        /// <param name="fieldName">The field name that we are getting the Int32 value for</param>
        /// <param name="defaultValue"></param>
        /// <returns></returns>
        public static Int32 GetInt32(this IDataReader dataReader, string fieldName, Int32 defaultValue = 0) {
            var fieldOrdinal = dataReader.GetOrdinal(fieldName);
            return dataReader.IsDBNull(fieldOrdinal) ? defaultValue : dataReader.GetInt32(fieldOrdinal);
        }

        /// <summary>
        /// This method extends the GetInt64 method of the data reader to allow calling by the field name
        /// </summary>
        /// <param name="dataReader">The datareader object we are extending</param>
        /// <param name="fieldName">The field name that we are getting the Int64 value for</param>
        /// <param name="defaultValue"></param>
        /// <returns></returns>
        public static Int64 GetInt64(this IDataReader dataReader, string fieldName, Int64 defaultValue = 0) {
            var fieldOrdinal = dataReader.GetOrdinal(fieldName);
            return dataReader.IsDBNull(fieldOrdinal) ? defaultValue : dataReader.GetInt64(fieldOrdinal);
        }

        /// <summary>
        /// This method extends the GetString method of the data reader to allow calling by the field name
        /// </summary>
        /// <param name="dataReader">The datareader object we are extending</param>
        /// <param name="fieldName">The field name that we are getting the string value for</param>
        /// <param name="defaultValue"></param>
        /// <returns></returns>
        public static string GetString(this IDataReader dataReader, string fieldName, string defaultValue = "") {
            var fieldOrdinal = dataReader.GetOrdinal(fieldName);
            return dataReader.IsDBNull(fieldOrdinal) ? defaultValue : dataReader.GetString(fieldOrdinal);
        }
Example:
var itemID = datareader.GetInt32("ItemID");

//With Default

var ItemName = datareader.GetString("ItemName", "Unknown");

Description

Use the Get[Type] functions that are part of the IDataReader but by passing the field name as a string as opposed to the field ordinal as int. Allows assigning default values for null values returned by the datareader.

Details

Double click on the code to select all.

 

;