private object ConvertType(SourceColumn col, SourceColumnInfo sci, object src_val) { if (src_val == null || src_val == DBNull.Value) { return(src_val); } var destType = sci.DestType; var srcType = sci.SrcType; var dstIsEnumProp = sci.DestIsEnumProp; object dest_val = src_val; if (dstIsEnumProp) { Log.DebugFormat("Convert [{0}] = '{1}' from [{2}] to enum", col.Name, src_val, srcType); // Lookup mapping first var destEnum = col.EnumEntries.FirstOrDefault(e => e.SourceValue == src_val.ToString()); if (destEnum != null) { return(destEnum.DestinationValue.Value); } else { // Try to autoresolve var enumProp = (Zetbox.App.Base.EnumerationProperty)col.DestinationProperty.Last(); // Lookup by name var destEnumEntry = enumProp.Enumeration.EnumerationEntries.FirstOrDefault(e => e.Name == src_val.ToString()); if (destEnumEntry != null) { return(destEnumEntry.Value); } else { // Try by number int int_val; if (int.TryParse(src_val.ToString(), out int_val)) { destEnumEntry = enumProp.Enumeration.EnumerationEntries.FirstOrDefault(e => e.Value == int_val); if (destEnumEntry != null) { return(destEnumEntry.Value); } } } // Nothing found -> return null return(DBNull.Value); } } else if (srcType != destType && col.References == null) { Log.DebugFormat("Convert [{0}] = '{1}' from [{2}] to [{3}]", col.Name, src_val, srcType, destType); try { switch (destType) { case DbType.AnsiString: case DbType.AnsiStringFixedLength: case DbType.String: case DbType.StringFixedLength: dest_val = src_val.ToString(); break; case DbType.Boolean: dest_val = _boolConverter.Convert(src_val); break; case DbType.Date: case DbType.DateTime: case DbType.DateTime2: dest_val = _dateTimeConverter.Convert(src_val); break; case DbType.Single: dest_val = Convert.ToSingle(src_val, CultureInfo.GetCultureInfo("de-AT")); break; case DbType.Double: dest_val = Convert.ToDouble(src_val, CultureInfo.GetCultureInfo("de-AT")); break; case DbType.Byte: dest_val = _byteConverter.Convert(src_val); break; case DbType.Int16: dest_val = _int16Converter.Convert(src_val); break; case DbType.Int32: dest_val = _int32Converter.Convert(src_val); break; case DbType.SByte: dest_val = Convert.ToSByte(src_val, CultureInfo.GetCultureInfo("de-AT")); break; case DbType.Int64: dest_val = Convert.ToInt64(src_val, CultureInfo.GetCultureInfo("de-AT")); break; case DbType.UInt16: dest_val = Convert.ToUInt16(src_val, CultureInfo.GetCultureInfo("de-AT")); break; case DbType.UInt32: dest_val = Convert.ToUInt32(src_val, CultureInfo.GetCultureInfo("de-AT")); break; case DbType.UInt64: dest_val = Convert.ToUInt64(src_val, CultureInfo.GetCultureInfo("de-AT")); break; case DbType.Guid: dest_val = new Guid(src_val.ToString()); break; case DbType.Currency: case DbType.Decimal: case DbType.VarNumeric: dest_val = Convert.ToDecimal(src_val, CultureInfo.GetCultureInfo("de-AT")); break; case DbType.Binary: case DbType.DateTimeOffset: case DbType.Object: case DbType.Time: case DbType.Xml: default: throw new NotSupportedException("Unknown DbType " + destType.ToString()); } } catch { dest_val = DBNull.Value; } if (dest_val == null || dest_val == DBNull.Value) { AddError(string.Format("Unable to convert '{{0}}' to {0}", destType), src_val); } } Log.DebugFormat(" => '{0}'", dest_val); return(dest_val); }
private object ConvertType(SourceColumn col, SourceColumnInfo sci, object src_val) { if (src_val == null || src_val == DBNull.Value) return src_val; var destType = sci.DestType; var srcType = sci.SrcType; var dstIsEnumProp = sci.DestIsEnumProp; object dest_val = src_val; if (dstIsEnumProp) { Log.DebugFormat("Convert [{0}] = '{1}' from [{2}] to enum", col.Name, src_val, srcType); // Lookup mapping first var destEnum = col.EnumEntries.FirstOrDefault(e => e.SourceValue == src_val.ToString()); if (destEnum != null) { return destEnum.DestinationValue.Value; } else { // Try to autoresolve var enumProp = (Zetbox.App.Base.EnumerationProperty)col.DestinationProperty.Last(); // Lookup by name var destEnumEntry = enumProp.Enumeration.EnumerationEntries.FirstOrDefault(e => e.Name == src_val.ToString()); if (destEnumEntry != null) { return destEnumEntry.Value; } else { // Try by number int int_val; if (int.TryParse(src_val.ToString(), out int_val)) { destEnumEntry = enumProp.Enumeration.EnumerationEntries.FirstOrDefault(e => e.Value == int_val); if (destEnumEntry != null) { return destEnumEntry.Value; } } } // Nothing found -> return null return DBNull.Value; } } else if (srcType != destType && col.References == null) { Log.DebugFormat("Convert [{0}] = '{1}' from [{2}] to [{3}]", col.Name, src_val, srcType, destType); try { switch (destType) { case DbType.AnsiString: case DbType.AnsiStringFixedLength: case DbType.String: case DbType.StringFixedLength: dest_val = src_val.ToString(); break; case DbType.Boolean: dest_val = _boolConverter.Convert(src_val); break; case DbType.Date: case DbType.DateTime: case DbType.DateTime2: dest_val = _dateTimeConverter.Convert(src_val); break; case DbType.Single: dest_val = Convert.ToSingle(src_val, CultureInfo.GetCultureInfo("de-AT")); break; case DbType.Double: dest_val = Convert.ToDouble(src_val, CultureInfo.GetCultureInfo("de-AT")); break; case DbType.Byte: dest_val = _byteConverter.Convert(src_val); break; case DbType.Int16: dest_val = _int16Converter.Convert(src_val); break; case DbType.Int32: dest_val = _int32Converter.Convert(src_val); break; case DbType.SByte: dest_val = Convert.ToSByte(src_val, CultureInfo.GetCultureInfo("de-AT")); break; case DbType.Int64: dest_val = Convert.ToInt64(src_val, CultureInfo.GetCultureInfo("de-AT")); break; case DbType.UInt16: dest_val = Convert.ToUInt16(src_val, CultureInfo.GetCultureInfo("de-AT")); break; case DbType.UInt32: dest_val = Convert.ToUInt32(src_val, CultureInfo.GetCultureInfo("de-AT")); break; case DbType.UInt64: dest_val = Convert.ToUInt64(src_val, CultureInfo.GetCultureInfo("de-AT")); break; case DbType.Guid: dest_val = new Guid(src_val.ToString()); break; case DbType.Currency: case DbType.Decimal: case DbType.VarNumeric: dest_val = Convert.ToDecimal(src_val, CultureInfo.GetCultureInfo("de-AT")); break; case DbType.Binary: case DbType.DateTimeOffset: case DbType.Object: case DbType.Time: case DbType.Xml: default: throw new NotSupportedException("Unknown DbType " + destType.ToString()); } } catch { dest_val = DBNull.Value; } if (dest_val == null || dest_val == DBNull.Value) { AddError(string.Format("Unable to convert '{{0}}' to {0}", destType), src_val); } } Log.DebugFormat(" => '{0}'", dest_val); return dest_val; }