Exemple #1
0
        /// <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));
            }
        }
Exemple #2
0
        /// <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);
        }