/// <summary> /// Get a single value of given type from the single cell of the read result; /// Throw exception when invalid /// </summary> public static Type Single <Type>(this SQLiteDataReader reader, bool returnDefaultWhenEmptyForValueType = false) { // If there is no row and type is not nullable then throw an exception otherwise return null bool canBeNull = !typeof(Type).IsValueType || (Nullable.GetUnderlyingType(typeof(Type)) != null); if (!reader.HasRows) { reader.Close(); // Close reader if (canBeNull || returnDefaultWhenEmptyForValueType) { return(default(Type)); } else { throw new ArgumentException("Reader contains no value."); } } object value = null; while (reader.Read()) // Necessary to close the reading even if we have only one row { value = reader[0]; } reader.Close(); if (value == DBNull.Value && canBeNull) { return(default(Type)); } else { return(ConvertExtension.ChangeType <Type>(value)); } }
/// <summary> /// Extract a list of single type of values from a dr /// </summary> public static List <type> List <type>(this SQLiteDataReader reader) where type : IConvertible { // If there is no row then return null if (!reader.HasRows) { reader.Close(); // Close reader return(null); } // Read all the rows and get the first element of each row List <type> list = new List <type>(); while (reader.Read()) // Necessary to close the reading even if we have only one row // Add to return list { list.Add(ConvertExtension.ChangeType <type>(reader[0])); } reader.Close(); return(list); }