Esempio n. 1
0
        static public string GetData(SQLiteDataReader reader, string column)
        {
            switch (Type.GetTypeCode(reader.GetFieldType(reader.GetOrdinal(column))))
            {
            case TypeCode.Boolean:
                return(reader.GetBoolean(reader.GetOrdinal(column)).ToString());

            case TypeCode.Byte:
                return(reader.GetByte(reader.GetOrdinal(column)).ToString());

            case TypeCode.Char:
                return(reader.GetChar(reader.GetOrdinal(column)).ToString());

            case TypeCode.DateTime:
                return(reader.GetDateTime(reader.GetOrdinal(column)).ToString("yyyy/mm/dd HH:mm:ss"));

            case TypeCode.Decimal:
                return(reader.GetDecimal(reader.GetOrdinal(column)).ToString());

            case TypeCode.Double:
                return(reader.GetDouble(reader.GetOrdinal(column)).ToString());

            case TypeCode.Int16:
                return(reader.GetInt16(reader.GetOrdinal(column)).ToString());

            case TypeCode.Int32:
                return(reader.GetInt32(reader.GetOrdinal(column)).ToString());

            case TypeCode.Int64:
                return(reader.GetInt64(reader.GetOrdinal(column)).ToString());

            case TypeCode.String:
                return(reader.GetString(reader.GetOrdinal(column)));

            default:
                return("");
            }
        }
Esempio n. 2
0
        public static char GetDBChar(string SqlFieldName, SQLiteDataReader Reader)
        {
            int columnIndex = Reader.GetOrdinal(SqlFieldName);

            return(Reader[SqlFieldName].Equals(DBNull.Value) ? ' ' : Reader.GetChar(columnIndex));
        }
Esempio n. 3
0
        public T ReadFromDbReader <T>(SQLiteDataReader reader, string prefix = "") where T : new()
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }
            if (prefix == null)
            {
                prefix = "";
            }
            var type = typeof(T);

            if (!storedTypes.ContainsKey(type))
            {
                LoadInfo(type);
            }
            var cont = storedTypes[type];

            cont.LoadedCount++;

            var r = Activator.CreateInstance <T>();

            if (r is IDbLoader)
            {
                ((IDbLoader)r).Load(reader, prefix);
                return(r);
            }

            int[] cols = new int[cont.NameTable.Length];
            for (int i = 0; i < cols.Length; ++i)
            {
                cols[i] = reader.GetOrdinal(prefix + cont.NameTable[i]);
            }

            for (int i = 0; i < cols.Length; ++i)
            {
                var name = cont.NameTable[i];
                var prop = cont.Properties[name];
                var attr = cont.PropAttributes[name];
                var ind  = cols[i];


                switch (cont.PropertyType[name])
                {
                case "bo?": FillKnowProp(cont, name, r, prop, reader.IsDBNull(ind), attr.NullValue, null, () => (bool?)reader.GetBoolean(ind)); break;

                case "sh?": FillKnowProp(cont, name, r, prop, reader.IsDBNull(ind), attr.NullValue, null, () => (short?)reader.GetInt16(ind)); break;

                case "in?": FillKnowProp(cont, name, r, prop, reader.IsDBNull(ind), attr.NullValue, null, () => (int?)reader.GetInt32(ind)); break;

                case "lo?": FillKnowProp(cont, name, r, prop, reader.IsDBNull(ind), attr.NullValue, null, () => (long?)reader.GetInt64(ind)); break;

                case "fl?": FillKnowProp(cont, name, r, prop, reader.IsDBNull(ind), attr.NullValue, null, () => (float?)reader.GetFloat(ind)); break;

                case "do?": FillKnowProp(cont, name, r, prop, reader.IsDBNull(ind), attr.NullValue, null, () => (double?)reader.GetDouble(ind)); break;

                case "ch?": FillKnowProp(cont, name, r, prop, reader.IsDBNull(ind), attr.NullValue, null, () => (char?)reader.GetChar(ind)); break;

                case "Da?": FillKnowProp(cont, name, r, prop, reader.IsDBNull(ind), attr.NullValue, null, () => (DateTime?)reader.GetDateTime(ind)); break;

                case "Gu?": FillKnowProp(cont, name, r, prop, reader.IsDBNull(ind), attr.NullValue, null, () => (Guid?)reader.GetGuid(ind)); break;

                case "str": FillKnowProp(cont, name, r, prop, reader.IsDBNull(ind), attr.NullValue, null, () => reader.GetString(ind)); break;

                case "boo": FillKnowProp(cont, name, r, prop, reader.IsDBNull(ind), attr.NullValue, false, () => reader.GetBoolean(ind)); break;

                case "sho": FillKnowProp(cont, name, r, prop, reader.IsDBNull(ind), attr.NullValue, 0, () => reader.GetInt16(ind)); break;

                case "int": FillKnowProp(cont, name, r, prop, reader.IsDBNull(ind), attr.NullValue, 0, () => reader.GetInt32(ind)); break;

                case "lon": FillKnowProp(cont, name, r, prop, reader.IsDBNull(ind), attr.NullValue, 0, () => reader.GetInt64(ind)); break;

                case "flo": FillKnowProp(cont, name, r, prop, reader.IsDBNull(ind), attr.NullValue, 0, () => reader.GetFloat(ind)); break;

                case "dou": FillKnowProp(cont, name, r, prop, reader.IsDBNull(ind), attr.NullValue, 0, () => reader.GetDouble(ind)); break;

                case "cha": FillKnowProp(cont, name, r, prop, reader.IsDBNull(ind), attr.NullValue, 0, () => reader.GetChar(ind)); break;

                case "Dat": FillKnowProp(cont, name, r, prop, reader.IsDBNull(ind), attr.NullValue, new DateTime(), () => reader.GetDateTime(ind)); break;

                case "Gui": FillKnowProp(cont, name, r, prop, reader.IsDBNull(ind), attr.NullValue, new Guid(), () => reader.GetGuid(ind)); break;

                case "en?": FillKnowProp(cont, name, r, prop, reader.IsDBNull(ind), attr.NullValue, null, () => (int?)reader.GetInt32(ind)); break;

                case "enu": FillKnowProp(cont, name, r, prop, reader.IsDBNull(ind), attr.NullValue, 0, () => reader.GetInt32(ind)); break;

                default:
                {
                    if (!MatchTransfer(r, prop, () => reader.IsDBNull(ind) ? null : (bool?)reader.GetBoolean(ind)) &
                        !MatchTransfer(r, prop, () => reader.IsDBNull(ind) ? null : (short?)reader.GetInt16(ind)) &
                        !MatchTransfer(r, prop, () => reader.IsDBNull(ind) ? null : (int?)reader.GetInt32(ind)) &
                        !MatchTransfer(r, prop, () => reader.IsDBNull(ind) ? null : (long?)reader.GetInt64(ind)) &
                        !MatchTransfer(r, prop, () => reader.IsDBNull(ind) ? null : (float?)reader.GetFloat(ind)) &
                        !MatchTransfer(r, prop, () => reader.IsDBNull(ind) ? null : (double?)reader.GetDouble(ind)) &
                        !MatchTransfer(r, prop, () => reader.IsDBNull(ind) ? null : (char?)reader.GetChar(ind)) &
                        !MatchTransfer(r, prop, () => reader.IsDBNull(ind) ? null : (DateTime?)reader.GetDateTime(ind)) &
                        !MatchTransfer(r, prop, () => reader.IsDBNull(ind) ? null : (Guid?)reader.GetGuid(ind)) &
                        !MatchTransfer(r, prop, reader.IsDBNull(ind), attr.NullValue, null, () => reader.GetString(ind)) &
                        !MatchTransfer(r, prop, reader.IsDBNull(ind), attr.NullValue, false, () => reader.GetBoolean(ind)) &
                        !MatchTransfer(r, prop, reader.IsDBNull(ind), attr.NullValue, 0, () => reader.GetInt16(ind)) &
                        !MatchTransfer(r, prop, reader.IsDBNull(ind), attr.NullValue, 0, () => reader.GetInt32(ind)) &
                        !MatchTransfer(r, prop, reader.IsDBNull(ind), attr.NullValue, 0, () => reader.GetInt64(ind)) &
                        !MatchTransfer(r, prop, reader.IsDBNull(ind), attr.NullValue, 0, () => reader.GetFloat(ind)) &
                        !MatchTransfer(r, prop, reader.IsDBNull(ind), attr.NullValue, 0, () => reader.GetDouble(ind)) &
                        !MatchTransfer(r, prop, reader.IsDBNull(ind), attr.NullValue, 0, () => reader.GetChar(ind)) &
                        !MatchTransfer(r, prop, reader.IsDBNull(ind), attr.NullValue, DateTime.Now, () => reader.GetDateTime(ind)) &
                        !MatchTransfer(r, prop, reader.IsDBNull(ind), attr.NullValue, new Guid(), () => reader.GetGuid(ind)))
                    {
                        throw new ArgumentException("cannot found matching local type for " + prefix + name);
                    }
                } break;
                }
            }

            return(r);
        }
Esempio n. 4
0
        /// <summary>
        /// Converts attributes from an <see cref="SQLiteDataReader"/> to an Entity
        /// </summary>
        /// <param name="table">The <see cref="TableMapping"/> for this Entity</param>
        /// <param name="reader">The current, open DataReader object</param>
        /// <returns></returns>
        internal TEntity ConvertToEntity <TEntity>(TableMapping table, SQLiteDataReader reader)
        {
            // Use reflection to map the column name to the object Property
            TEntity entity = (TEntity)Activator.CreateInstance(table.EntityType, new object[] { });

            for (int i = 0; i < reader.FieldCount; ++i)
            {
                string       attrName = reader.GetName(i);
                PropertyInfo property = table.GetAttribute(attrName).Property;

                if (property.PropertyType.IsEnum)
                {
                    var value = Enum.Parse(property.PropertyType, reader.GetValue(i).ToString());
                    property.SetValue(entity, value);
                }
                else
                {
                    // SQLite doesn't support nearly as many primitive types as
                    // C# does, so we must translate
                    switch (Type.GetTypeCode(property.PropertyType))
                    {
                    case TypeCode.Byte:
                        property.SetValue(entity, reader.GetByte(i));
                        break;

                    case TypeCode.Int16:
                        property.SetValue(entity, reader.GetInt16(i));
                        break;

                    case TypeCode.Int32:
                        property.SetValue(entity, reader.GetInt32(i));
                        break;

                    case TypeCode.Int64:
                        property.SetValue(entity, reader.GetInt64(i));
                        break;

                    case TypeCode.Boolean:
                        property.SetValue(entity, reader.GetBoolean(i));
                        break;

                    case TypeCode.Decimal:
                        property.SetValue(entity, reader.GetDecimal(i));
                        break;

                    case TypeCode.Double:
                        property.SetValue(entity, reader.GetDouble(i));
                        break;

                    case TypeCode.Char:
                        property.SetValue(entity, reader.GetChar(i));
                        break;

                    case TypeCode.DateTime:
                        if (!reader.IsDBNull(i))
                        {
                            property.SetValue(entity, reader.GetDateTime(i));
                        }
                        break;

                    default:
                        // Correct DBNull values
                        object val = reader.GetValue(i);
                        if (val is DBNull)
                        {
                            continue;
                        }

                        property.SetValue(entity, val);
                        break;
                    }
                }
            }

            // Foreign keys!
            table.CreateRelationships(entity, this);

            // Add object
            return(entity);
        }