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(""); } }
public static char GetDBChar(string SqlFieldName, SQLiteDataReader Reader) { int columnIndex = Reader.GetOrdinal(SqlFieldName); return(Reader[SqlFieldName].Equals(DBNull.Value) ? ' ' : Reader.GetChar(columnIndex)); }
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); }
/// <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); }