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