GetStorageType() static private method

static private GetStorageType ( Type dataType ) : StorageType
dataType System.Type
return StorageType
        public static SqlInt32 ConvertToSqlInt32(object value)
        {
            if (value == DBNull.Value)
            {
                return(SqlInt32.Null);
            }
            Type type = value.GetType();

            switch (DataStorage.GetStorageType(type))
            {
            case StorageType.Byte:
                return((SqlInt32)((byte)value));

            case StorageType.Int16:
                return((SqlInt32)((short)value));

            case StorageType.UInt16:
                return((SqlInt32)((ushort)value));

            case StorageType.Int32:
                return((int)value);

            case StorageType.SqlByte:
                return((SqlByte)value);

            case StorageType.SqlInt16:
                return((SqlInt16)value);

            case StorageType.SqlInt32:
                return((SqlInt32)value);
            }
            throw ExceptionBuilder.ConvertFailed(type, typeof(SqlInt32));
        }
Esempio n. 2
0
        public static SqlInt16 ConvertToSqlInt16(object value)
        {
            Debug.Assert(value != null, "null argument in ConvertToSqlInt16");
            if (value == DBNull.Value)
            {
                return(SqlInt16.Null);
            }
            Type        valueType = value.GetType();
            StorageType stype     = DataStorage.GetStorageType(valueType);

            switch (stype)
            {
            case StorageType.Byte:
                return((byte)value);

            case StorageType.Int16:
                return((short)value);

            case StorageType.SqlByte:
                return((SqlByte)value);

            case StorageType.SqlInt16:
                return((SqlInt16)value);

            default:
                throw ExceptionBuilder.ConvertFailed(valueType, typeof(SqlInt16));
            }
        }
Esempio n. 3
0
        public static SqlDecimal ConvertToSqlDecimal(object value)
        {
            Debug.Assert(value != null, "null argument in ConvertToSqlDecimal");
            if (value == DBNull.Value)
            {
                return(SqlDecimal.Null);
            }
            Type        valueType = value.GetType();
            StorageType stype     = DataStorage.GetStorageType(valueType);

            switch (stype)
            {
            case StorageType.SqlDecimal:
                return((SqlDecimal)value);

            case StorageType.Decimal:
                return((decimal)value);

            case StorageType.SqlInt64:
                return((SqlInt64)value);

            case StorageType.Int64:
                return((long)value);

            case StorageType.UInt64:
                return((ulong)value);

            case StorageType.SqlInt16:
                return((SqlInt16)value);

            case StorageType.Int16:
                return((short)value);

            case StorageType.UInt16:
                return((ushort)value);

            case StorageType.SqlInt32:
                return((SqlInt32)value);

            case StorageType.Int32:
                return((int)value);

            case StorageType.UInt32:
                return((uint)value);

            case StorageType.SqlByte:
                return((SqlByte)value);

            case StorageType.Byte:
                return((byte)value);

            case StorageType.SqlMoney:
                return((SqlMoney)value);

            default:
                throw ExceptionBuilder.ConvertFailed(valueType, typeof(SqlDecimal));
            }
        }
        public static SqlSingle ConvertToSqlSingle(object value)
        {
            if (value == DBNull.Value)
            {
                return(SqlSingle.Null);
            }
            Type type = value.GetType();

            switch (DataStorage.GetStorageType(type))
            {
            case StorageType.Byte:
                return((float)((byte)value));

            case StorageType.Int16:
                return((float)((short)value));

            case StorageType.UInt16:
                return((float)((ushort)value));

            case StorageType.Int32:
                return((float)((int)value));

            case StorageType.UInt32:
                return((float)((uint)value));

            case StorageType.Int64:
                return((float)((long)value));

            case StorageType.UInt64:
                return((float)((ulong)value));

            case StorageType.Single:
                return((float)value);

            case StorageType.SqlByte:
                return((SqlByte)value);

            case StorageType.SqlDecimal:
                return((SqlDecimal)value);

            case StorageType.SqlInt16:
                return((SqlInt16)value);

            case StorageType.SqlInt32:
                return((SqlInt32)value);

            case StorageType.SqlInt64:
                return((SqlInt64)value);

            case StorageType.SqlMoney:
                return((SqlMoney)value);

            case StorageType.SqlSingle:
                return((SqlSingle)value);
            }
            throw ExceptionBuilder.ConvertFailed(type, typeof(SqlSingle));
        }
        public static SqlChars ConvertToSqlChars(object value)
        {
            if (value == DBNull.Value)
            {
                return(SqlChars.Null);
            }
            Type dataType = value.GetType();

            if (DataStorage.GetStorageType(dataType) != StorageType.SqlChars)
            {
                throw ExceptionBuilder.ConvertFailed(dataType, typeof(SqlChars));
            }
            return((SqlChars)value);
        }
 public static object ChangeTypeForDefaultValue(object value, Type type, IFormatProvider formatProvider)
 {
     if (type == typeof(BigInteger))
     {
         if ((DBNull.Value != value) && (value != null))
         {
             return(BigIntegerStorage.ConvertToBigInteger(value, formatProvider));
         }
         return(DBNull.Value);
     }
     if (value is BigInteger)
     {
         return(BigIntegerStorage.ConvertFromBigInteger((BigInteger)value, type, formatProvider));
     }
     return(ChangeType2(value, DataStorage.GetStorageType(type), type, formatProvider));
 }
Esempio n. 7
0
        public static SqlByte ConvertToSqlByte(object value)
        {
            Debug.Assert(value != null, "null argument in ConvertToSqlByte");
            if ((value == DBNull.Value))
            { // null is not valid, SqlByte is struct
                return(SqlByte.Null);
            }
            Type        valueType = value.GetType();
            StorageType stype     = DataStorage.GetStorageType(valueType);

            return(stype switch
            {
                StorageType.SqlByte => (SqlByte)value,
                StorageType.Byte => (byte)value,
                _ => throw ExceptionBuilder.ConvertFailed(valueType, typeof(SqlByte)),
            });
Esempio n. 8
0
        // this should not be called for XmlSerialization
        public static object ChangeTypeForDefaultValue(object value, Type type, IFormatProvider formatProvider)
        {
            if (type == typeof(System.Numerics.BigInteger))
            {
                if ((DBNull.Value == value) || (null == value))
                {
                    return(DBNull.Value);
                }
                return(BigIntegerStorage.ConvertToBigInteger(value, formatProvider));
            }
            else if (value is System.Numerics.BigInteger)
            {
                return(BigIntegerStorage.ConvertFromBigInteger((System.Numerics.BigInteger)value, type, formatProvider));
            }

            return(ChangeType2(value, DataStorage.GetStorageType(type), type, formatProvider));
        }
Esempio n. 9
0
        public static SqlChars ConvertToSqlChars(object value)
        {
            Debug.Assert(value != null, "null argument in ConvertToSqlChars");
            if (value == DBNull.Value)
            {
                return(SqlChars.Null);
            }
            Type        valueType = value.GetType();
            StorageType stype     = DataStorage.GetStorageType(valueType);

            switch (stype)
            {
            case StorageType.SqlChars:
                return((SqlChars)value);

            default:
                throw ExceptionBuilder.ConvertFailed(valueType, typeof(SqlChars));
            }
        }
        public static SqlBinary ConvertToSqlBinary(object value)
        {
            if (value == DBNull.Value)
            {
                return(SqlBinary.Null);
            }
            Type        dataType    = value.GetType();
            StorageType storageType = DataStorage.GetStorageType(dataType);

            if (storageType != StorageType.ByteArray)
            {
                if (storageType != StorageType.SqlBinary)
                {
                    throw ExceptionBuilder.ConvertFailed(dataType, typeof(SqlBinary));
                }
                return((SqlBinary)value);
            }
            return((byte[])value);
        }
        public static SqlBoolean ConvertToSqlBoolean(object value)
        {
            if ((value == DBNull.Value) || (value == null))
            {
                return(SqlBoolean.Null);
            }
            Type        dataType    = value.GetType();
            StorageType storageType = DataStorage.GetStorageType(dataType);

            if (storageType != StorageType.Boolean)
            {
                if (storageType != StorageType.SqlBoolean)
                {
                    throw ExceptionBuilder.ConvertFailed(dataType, typeof(SqlBoolean));
                }
                return((SqlBoolean)value);
            }
            return((bool)value);
        }
        public static SqlGuid ConvertToSqlGuid(object value)
        {
            if (value == DBNull.Value)
            {
                return(SqlGuid.Null);
            }
            Type        dataType    = value.GetType();
            StorageType storageType = DataStorage.GetStorageType(dataType);

            if (storageType != StorageType.Guid)
            {
                if (storageType != StorageType.SqlGuid)
                {
                    throw ExceptionBuilder.ConvertFailed(dataType, typeof(SqlGuid));
                }
                return((SqlGuid)value);
            }
            return((Guid)value);
        }
Esempio n. 13
0
        public static SqlByte ConvertToSqlByte(object value)
        {
            Debug.Assert(value != null, "null argument in ConvertToSqlByte");
            if ((value == DBNull.Value))   // null is not valid, SqlByte is struct
            {
                return(SqlByte.Null);
            }
            Type        valueType = value.GetType();
            StorageType stype     = DataStorage.GetStorageType(valueType);

            switch (stype)
            {
            case StorageType.SqlByte:
                return((SqlByte)value);

            case StorageType.Byte:
                return((byte)value);

            default:
                throw ExceptionBuilder.ConvertFailed(valueType, typeof(SqlByte));
            }
        }
Esempio n. 14
0
        public static SqlBinary ConvertToSqlBinary(object value)
        {
            Debug.Assert(value != null, "null argument in ConvertToSqlBinary");
            if (value == DBNull.Value)
            {
                return(SqlBinary.Null);
            }
            Type        valueType = value.GetType();
            StorageType stype     = DataStorage.GetStorageType(valueType);

            switch (stype)
            {
            case StorageType.SqlBinary:
                return((SqlBinary)value);

            case StorageType.ByteArray:
                return((byte[])value);

            default:
                throw ExceptionBuilder.ConvertFailed(valueType, typeof(SqlBinary));
            }
        }
Esempio n. 15
0
        public static SqlBoolean ConvertToSqlBoolean(object value)
        {
            Debug.Assert(value != null, "null argument in ConvertToSqlBoolean");
            if ((value == DBNull.Value) || (value == null))
            {
                return(SqlBoolean.Null);
            }
            Type        valueType = value.GetType();
            StorageType stype     = DataStorage.GetStorageType(valueType);

            switch (stype)
            {
            case StorageType.SqlBoolean:
                return((SqlBoolean)value);

            case StorageType.Boolean:
                return((bool)value);

            default:
                throw ExceptionBuilder.ConvertFailed(valueType, typeof(SqlBoolean));
            }
        }
Esempio n. 16
0
        // this should be called for XmlSerialization
        public static object ChangeTypeForXML(object value, Type type)
        {
            Debug.Assert(value is string || type == typeof(string), "invalid call to ChangeTypeForXML");
            StorageType destinationType = DataStorage.GetStorageType(type);
            Type        valueType       = value.GetType();
            StorageType vtype           = DataStorage.GetStorageType(valueType);

            switch (destinationType)
            { // if destination is not string
            case StorageType.SqlBinary:
                return(new SqlBinary(Convert.FromBase64String((string)value)));

            case StorageType.SqlBoolean:
                return(new SqlBoolean(XmlConvert.ToBoolean((string)value)));

            case StorageType.SqlByte:
                return(new SqlByte(XmlConvert.ToByte((string)value)));

            case StorageType.SqlBytes:
                return(new SqlBytes(Convert.FromBase64String((string)value)));

            case StorageType.SqlChars:
                return(new SqlChars(((string)value).ToCharArray()));

            case StorageType.SqlDateTime:
                return(new SqlDateTime(XmlConvert.ToDateTime((string)value, XmlDateTimeSerializationMode.RoundtripKind)));

            case StorageType.SqlDecimal:
                return(SqlDecimal.Parse((string)value));    // parses invariant format and is larger has larger range then Decimal

            case StorageType.SqlDouble:
                return(new SqlDouble(XmlConvert.ToDouble((string)value)));

            case StorageType.SqlGuid:
                return(new SqlGuid(XmlConvert.ToGuid((string)value)));

            case StorageType.SqlInt16:
                return(new SqlInt16(XmlConvert.ToInt16((string)value)));

            case StorageType.SqlInt32:
                return(new SqlInt32(XmlConvert.ToInt32((string)value)));

            case StorageType.SqlInt64:
                return(new SqlInt64(XmlConvert.ToInt64((string)value)));

            case StorageType.SqlMoney:
                return(new SqlMoney(XmlConvert.ToDecimal((string)value)));

            case StorageType.SqlSingle:
                return(new SqlSingle(XmlConvert.ToSingle((string)value)));

            case StorageType.SqlString:
                return(new SqlString((string)value));

            //                case StorageType.SqlXml: // What to do
            //                    if (DataStorage.IsObjectNull(value)) {
            //                        return SqlXml.Null;
            //                    }
            //                    goto default;
            case StorageType.Boolean:
                if ("1" == (string)value)
                {
                    return(true);
                }
                if ("0" == (string)value)
                {
                    return(false);
                }
                return(XmlConvert.ToBoolean((string)value));

            case StorageType.Char:
                return(XmlConvert.ToChar((string)value));

            case StorageType.SByte:
                return(XmlConvert.ToSByte((string)value));

            case StorageType.Byte:
                return(XmlConvert.ToByte((string)value));

            case StorageType.Int16:
                return(XmlConvert.ToInt16((string)value));

            case StorageType.UInt16:
                return(XmlConvert.ToUInt16((string)value));

            case StorageType.Int32:
                return(XmlConvert.ToInt32((string)value));

            case StorageType.UInt32:
                return(XmlConvert.ToUInt32((string)value));

            case StorageType.Int64:
                return(XmlConvert.ToInt64((string)value));

            case StorageType.UInt64:
                return(XmlConvert.ToUInt64((string)value));

            case StorageType.Single:
                return(XmlConvert.ToSingle((string)value));

            case StorageType.Double:
                return(XmlConvert.ToDouble((string)value));

            case StorageType.Decimal:
                return(XmlConvert.ToDecimal((string)value));

            case StorageType.DateTime:
                return(XmlConvert.ToDateTime((string)value, XmlDateTimeSerializationMode.RoundtripKind));

            case StorageType.Guid:
                return(XmlConvert.ToGuid((string)value));

            case StorageType.Uri:
                return(new Uri((string)value));

            case StorageType.DateTimeOffset:
                return(XmlConvert.ToDateTimeOffset((string)value));

            case StorageType.TimeSpan:
                switch (vtype)
                {
                case StorageType.String:
                    return(XmlConvert.ToTimeSpan((string)value));

                case StorageType.Int32:
                    return(new TimeSpan((int)value));

                case StorageType.Int64:
                    return(new TimeSpan((long)value));

                default:
                    return((TimeSpan)value);
                }

            default:
            {
                if ((DBNull.Value == value) || (null == value))
                {
                    return(DBNull.Value);
                }

                switch (vtype)
                {         // To String
                case StorageType.SqlBinary:
                    return(Convert.ToBase64String(((SqlBinary)value).Value));

                case StorageType.SqlBoolean:
                    return(XmlConvert.ToString(((SqlBoolean)value).Value));

                case StorageType.SqlByte:
                    return(XmlConvert.ToString(((SqlByte)value).Value));

                case StorageType.SqlBytes:
                    return(Convert.ToBase64String(((SqlBytes)value).Value));

                case StorageType.SqlChars:
                    return(new string(((SqlChars)value).Value));

                case StorageType.SqlDateTime:
                    return(XmlConvert.ToString(((SqlDateTime)value).Value, XmlDateTimeSerializationMode.RoundtripKind));

                case StorageType.SqlDecimal:
                    return(((SqlDecimal)value).ToString());            // converts using invariant format and is larger has larger range then Decimal

                case StorageType.SqlDouble:
                    return(XmlConvert.ToString(((SqlDouble)value).Value));

                case StorageType.SqlGuid:
                    return(XmlConvert.ToString(((SqlGuid)value).Value));

                case StorageType.SqlInt16:
                    return(XmlConvert.ToString(((SqlInt16)value).Value));

                case StorageType.SqlInt32:
                    return(XmlConvert.ToString(((SqlInt32)value).Value));

                case StorageType.SqlInt64:
                    return(XmlConvert.ToString(((SqlInt64)value).Value));

                case StorageType.SqlMoney:
                    return(XmlConvert.ToString(((SqlMoney)value).Value));

                case StorageType.SqlSingle:
                    return(XmlConvert.ToString(((SqlSingle)value).Value));

                case StorageType.SqlString:
                    return(((SqlString)value).Value);

                case StorageType.Boolean:
                    return(XmlConvert.ToString((bool)value));

                case StorageType.Char:
                    return(XmlConvert.ToString((char)value));

                case StorageType.SByte:
                    return(XmlConvert.ToString((sbyte)value));

                case StorageType.Byte:
                    return(XmlConvert.ToString((byte)value));

                case StorageType.Int16:
                    return(XmlConvert.ToString((short)value));

                case StorageType.UInt16:
                    return(XmlConvert.ToString((ushort)value));

                case StorageType.Int32:
                    return(XmlConvert.ToString((int)value));

                case StorageType.UInt32:
                    return(XmlConvert.ToString((uint)value));

                case StorageType.Int64:
                    return(XmlConvert.ToString((long)value));

                case StorageType.UInt64:
                    return(XmlConvert.ToString((ulong)value));

                case StorageType.Single:
                    return(XmlConvert.ToString((float)value));

                case StorageType.Double:
                    return(XmlConvert.ToString((double)value));

                case StorageType.Decimal:
                    return(XmlConvert.ToString((decimal)value));

                case StorageType.DateTime:
                    return(XmlConvert.ToString((DateTime)value, XmlDateTimeSerializationMode.RoundtripKind));

                case StorageType.TimeSpan:
                    return(XmlConvert.ToString((TimeSpan)value));

                case StorageType.Guid:
                    return(XmlConvert.ToString((Guid)value));

                case StorageType.String:
                    return((string)value);

                case StorageType.CharArray:
                    return(new string((char[])value));

                case StorageType.DateTimeOffset:
                    return(XmlConvert.ToString((DateTimeOffset)value));

                default:
                    IConvertible iconvertible = (value as IConvertible);
                    if (null != iconvertible)
                    {
                        return(iconvertible.ToString(System.Globalization.CultureInfo.InvariantCulture));
                    }
                    // catch additional classes like Guid
                    IFormattable iformattable = (value as IFormattable);
                    if (null != iformattable)
                    {
                        return(iformattable.ToString(null, System.Globalization.CultureInfo.InvariantCulture));
                    }
                    return(value.ToString());
                }
            }
            }
        }
Esempio n. 17
0
        // this should not be called for XmlSerialization
        public static object ChangeType2(object value, StorageType stype, Type type, IFormatProvider formatProvider)
        {
            switch (stype)
            { // if destination is SQL type
            case StorageType.SqlBinary:
                return(SqlConvert.ConvertToSqlBinary(value));

            case StorageType.SqlBoolean:
                return(SqlConvert.ConvertToSqlBoolean(value));

            case StorageType.SqlByte:
                return(SqlConvert.ConvertToSqlByte(value));

            case StorageType.SqlBytes:
                return(SqlConvert.ConvertToSqlBytes(value));

            case StorageType.SqlChars:
                return(SqlConvert.ConvertToSqlChars(value));

            case StorageType.SqlDateTime:
                return(SqlConvert.ConvertToSqlDateTime(value));

            case StorageType.SqlDecimal:
                return(SqlConvert.ConvertToSqlDecimal(value));

            case StorageType.SqlDouble:
                return(SqlConvert.ConvertToSqlDouble(value));

            case StorageType.SqlGuid:
                return(SqlConvert.ConvertToSqlGuid(value));

            case StorageType.SqlInt16:
                return(SqlConvert.ConvertToSqlInt16(value));

            case StorageType.SqlInt32:
                return(SqlConvert.ConvertToSqlInt32(value));

            case StorageType.SqlInt64:
                return(SqlConvert.ConvertToSqlInt64(value));

            case StorageType.SqlMoney:
                return(SqlConvert.ConvertToSqlMoney(value));

            case StorageType.SqlSingle:
                return(SqlConvert.ConvertToSqlSingle(value));

            case StorageType.SqlString:
                return(SqlConvert.ConvertToSqlString(value));

            /*            case StorageType.SqlXml:
             *              if (DataStorage.IsObjectNull(value)) {
             *                  return SqlXml.Null;
             *              }
             *              goto default;
             */
            default:     // destination is CLR
                if ((DBNull.Value == value) || (null == value))
                {
                    return(DBNull.Value);
                }
                Type        valueType = value.GetType();
                StorageType vtype     = DataStorage.GetStorageType(valueType);
                // destination is CLR
                switch (vtype)
                {    // and source is SQL type
                case StorageType.SqlBinary:
                case StorageType.SqlBoolean:
                case StorageType.SqlByte:
                case StorageType.SqlBytes:
                case StorageType.SqlChars:
                case StorageType.SqlDateTime:
                case StorageType.SqlDecimal:
                case StorageType.SqlDouble:
                case StorageType.SqlGuid:
                case StorageType.SqlInt16:
                case StorageType.SqlInt32:
                case StorageType.SqlInt64:
                case StorageType.SqlMoney:
                case StorageType.SqlSingle:
                case StorageType.SqlString:
                    throw ExceptionBuilder.ConvertFailed(valueType, type);

                default:      // source is CLR type
                    if (StorageType.String == stype)
                    {         // destination is string
                        switch (vtype)
                        {     // source's  type
                        case StorageType.Boolean:
                            return(((IConvertible)(bool)value).ToString(formatProvider));

                        case StorageType.Char:
                            return(((IConvertible)(char)value).ToString(formatProvider));

                        case StorageType.SByte:
                            return(((sbyte)value).ToString(formatProvider));

                        case StorageType.Byte:
                            return(((byte)value).ToString(formatProvider));

                        case StorageType.Int16:
                            return(((short)value).ToString(formatProvider));

                        case StorageType.UInt16:
                            return(((ushort)value).ToString(formatProvider));

                        case StorageType.Int32:
                            return(((int)value).ToString(formatProvider));

                        case StorageType.UInt32:
                            return(((uint)value).ToString(formatProvider));

                        case StorageType.Int64:
                            return(((long)value).ToString(formatProvider));

                        case StorageType.UInt64:
                            return(((ulong)value).ToString(formatProvider));

                        case StorageType.Single:
                            return(((float)value).ToString(formatProvider));

                        case StorageType.Double:
                            return(((double)value).ToString(formatProvider));

                        case StorageType.Decimal:
                            return(((decimal)value).ToString(formatProvider));

                        case StorageType.DateTime:
                            return(((DateTime)value).ToString(formatProvider));

                        //return  XmlConvert.ToString((DateTime) value, XmlDateTimeSerializationMode.RoundtripKind);
                        case StorageType.TimeSpan:
                            return(XmlConvert.ToString((TimeSpan)value));

                        case StorageType.Guid:
                            return(XmlConvert.ToString((Guid)value));

                        case StorageType.String:
                            return((string)value);

                        case StorageType.CharArray:
                            return(new string((char[])value));

                        case StorageType.DateTimeOffset:
                            return(((DateTimeOffset)value).ToString(formatProvider));

                        case StorageType.BigInteger:
                            break;

                        default:
                            IConvertible iconvertible = (value as IConvertible);
                            if (null != iconvertible)
                            {
                                return(iconvertible.ToString(formatProvider));
                            }
                            // catch additional classes like Guid
                            IFormattable iformattable = (value as IFormattable);
                            if (null != iformattable)
                            {
                                return(iformattable.ToString(null, formatProvider));
                            }
                            return(value.ToString());
                        }
                    }
                    else if (StorageType.TimeSpan == stype)
                    {
                        // destination is TimeSpan
                        switch (vtype)
                        {
                        case StorageType.String:
                            return(XmlConvert.ToTimeSpan((string)value));

                        case StorageType.Int32:
                            return(new TimeSpan((int)value));

                        case StorageType.Int64:
                            return(new TimeSpan((long)value));

                        default:
                            return((TimeSpan)value);
                        }
                    }
                    else if (StorageType.DateTimeOffset == stype)
                    {         // destination is DateTimeOffset
                        return((DateTimeOffset)value);
                    }
                    else if (StorageType.String == vtype)
                    {         // if source is string
                        switch (stype)
                        {     // type of destination
                        case StorageType.String:
                            return((string)value);

                        case StorageType.Boolean:
                            if ("1" == (string)value)
                            {
                                return(true);
                            }
                            if ("0" == (string)value)
                            {
                                return(false);
                            }
                            break;

                        case StorageType.Char:
                            return(((IConvertible)(string)value).ToChar(formatProvider));

                        case StorageType.SByte:
                            return(((IConvertible)(string)value).ToSByte(formatProvider));

                        case StorageType.Byte:
                            return(((IConvertible)(string)value).ToByte(formatProvider));

                        case StorageType.Int16:
                            return(((IConvertible)(string)value).ToInt16(formatProvider));

                        case StorageType.UInt16:
                            return(((IConvertible)(string)value).ToUInt16(formatProvider));

                        case StorageType.Int32:
                            return(((IConvertible)(string)value).ToInt32(formatProvider));

                        case StorageType.UInt32:
                            return(((IConvertible)(string)value).ToUInt32(formatProvider));

                        case StorageType.Int64:
                            return(((IConvertible)(string)value).ToInt64(formatProvider));

                        case StorageType.UInt64:
                            return(((IConvertible)(string)value).ToUInt64(formatProvider));

                        case StorageType.Single:
                            return(((IConvertible)(string)value).ToSingle(formatProvider));

                        case StorageType.Double:
                            return(((IConvertible)(string)value).ToDouble(formatProvider));

                        case StorageType.Decimal:
                            return(((IConvertible)(string)value).ToDecimal(formatProvider));

                        case StorageType.DateTime:
                            return(((IConvertible)(string)value).ToDateTime(formatProvider));

                        //return  XmlConvert.ToDateTime((string) value, XmlDateTimeSerializationMode.RoundtripKind);
                        case StorageType.TimeSpan:
                            return(XmlConvert.ToTimeSpan((string)value));

                        case StorageType.Guid:
                            return(XmlConvert.ToGuid((string)value));

                        case StorageType.Uri:
                            return(new Uri((string)value));

                        default:             // other clr types,
                            break;
                        }
                    }
                    return(Convert.ChangeType(value, type, formatProvider));
                }
            }
        }
        public static object ChangeTypeForXML(object value, Type type)
        {
            StorageType storageType = DataStorage.GetStorageType(type);
            StorageType type3       = DataStorage.GetStorageType(value.GetType());

            switch (storageType)
            {
            case StorageType.Boolean:
                if (!("1" == ((string)value)))
                {
                    if ("0" == ((string)value))
                    {
                        return(false);
                    }
                    return(XmlConvert.ToBoolean((string)value));
                }
                return(true);

            case StorageType.Char:
                return(XmlConvert.ToChar((string)value));

            case StorageType.SByte:
                return(XmlConvert.ToSByte((string)value));

            case StorageType.Byte:
                return(XmlConvert.ToByte((string)value));

            case StorageType.Int16:
                return(XmlConvert.ToInt16((string)value));

            case StorageType.UInt16:
                return(XmlConvert.ToUInt16((string)value));

            case StorageType.Int32:
                return(XmlConvert.ToInt32((string)value));

            case StorageType.UInt32:
                return(XmlConvert.ToUInt32((string)value));

            case StorageType.Int64:
                return(XmlConvert.ToInt64((string)value));

            case StorageType.UInt64:
                return(XmlConvert.ToUInt64((string)value));

            case StorageType.Single:
                return(XmlConvert.ToSingle((string)value));

            case StorageType.Double:
                return(XmlConvert.ToDouble((string)value));

            case StorageType.Decimal:
                return(XmlConvert.ToDecimal((string)value));

            case StorageType.DateTime:
                return(XmlConvert.ToDateTime((string)value, XmlDateTimeSerializationMode.RoundtripKind));

            case StorageType.TimeSpan:
            {
                StorageType type2 = type3;
                switch (type2)
                {
                case StorageType.Int32:
                    return(new TimeSpan((long)((int)value)));

                case StorageType.Int64:
                    return(new TimeSpan((long)value));
                }
                if (type2 != StorageType.String)
                {
                    break;
                }
                return(XmlConvert.ToTimeSpan((string)value));
            }

            case StorageType.Guid:
                return(XmlConvert.ToGuid((string)value));

            case StorageType.DateTimeOffset:
                return(XmlConvert.ToDateTimeOffset((string)value));

            case StorageType.Uri:
                return(new Uri((string)value));

            case StorageType.SqlBinary:
                return(new SqlBinary(Convert.FromBase64String((string)value)));

            case StorageType.SqlBoolean:
                return(new SqlBoolean(XmlConvert.ToBoolean((string)value)));

            case StorageType.SqlByte:
                return(new SqlByte(XmlConvert.ToByte((string)value)));

            case StorageType.SqlBytes:
                return(new SqlBytes(Convert.FromBase64String((string)value)));

            case StorageType.SqlChars:
                return(new SqlChars(((string)value).ToCharArray()));

            case StorageType.SqlDateTime:
                return(new SqlDateTime(XmlConvert.ToDateTime((string)value, XmlDateTimeSerializationMode.RoundtripKind)));

            case StorageType.SqlDecimal:
                return(SqlDecimal.Parse((string)value));

            case StorageType.SqlDouble:
                return(new SqlDouble(XmlConvert.ToDouble((string)value)));

            case StorageType.SqlGuid:
                return(new SqlGuid(XmlConvert.ToGuid((string)value)));

            case StorageType.SqlInt16:
                return(new SqlInt16(XmlConvert.ToInt16((string)value)));

            case StorageType.SqlInt32:
                return(new SqlInt32(XmlConvert.ToInt32((string)value)));

            case StorageType.SqlInt64:
                return(new SqlInt64(XmlConvert.ToInt64((string)value)));

            case StorageType.SqlMoney:
                return(new SqlMoney(XmlConvert.ToDecimal((string)value)));

            case StorageType.SqlSingle:
                return(new SqlSingle(XmlConvert.ToSingle((string)value)));

            case StorageType.SqlString:
                return(new SqlString((string)value));

            default:
            {
                if ((DBNull.Value == value) || (value == null))
                {
                    return(DBNull.Value);
                }
                switch (type3)
                {
                case StorageType.Boolean:
                    return(XmlConvert.ToString((bool)value));

                case StorageType.Char:
                    return(XmlConvert.ToString((char)value));

                case StorageType.SByte:
                    return(XmlConvert.ToString((sbyte)value));

                case StorageType.Byte:
                    return(XmlConvert.ToString((byte)value));

                case StorageType.Int16:
                    return(XmlConvert.ToString((short)value));

                case StorageType.UInt16:
                    return(XmlConvert.ToString((ushort)value));

                case StorageType.Int32:
                    return(XmlConvert.ToString((int)value));

                case StorageType.UInt32:
                    return(XmlConvert.ToString((uint)value));

                case StorageType.Int64:
                    return(XmlConvert.ToString((long)value));

                case StorageType.UInt64:
                    return(XmlConvert.ToString((ulong)value));

                case StorageType.Single:
                    return(XmlConvert.ToString((float)value));

                case StorageType.Double:
                    return(XmlConvert.ToString((double)value));

                case StorageType.Decimal:
                    return(XmlConvert.ToString((decimal)value));

                case StorageType.DateTime:
                    return(XmlConvert.ToString((DateTime)value, XmlDateTimeSerializationMode.RoundtripKind));

                case StorageType.TimeSpan:
                    return(XmlConvert.ToString((TimeSpan)value));

                case StorageType.String:
                    return((string)value);

                case StorageType.Guid:
                    return(XmlConvert.ToString((Guid)value));

                case StorageType.CharArray:
                    return(new string((char[])value));

                case StorageType.DateTimeOffset:
                    return(XmlConvert.ToString((DateTimeOffset)value));

                case StorageType.SqlBinary:
                {
                    SqlBinary binary = (SqlBinary)value;
                    return(Convert.ToBase64String(binary.Value));
                }

                case StorageType.SqlBoolean:
                {
                    SqlBoolean flag = (SqlBoolean)value;
                    return(XmlConvert.ToString(flag.Value));
                }

                case StorageType.SqlByte:
                {
                    SqlByte num7 = (SqlByte)value;
                    return(XmlConvert.ToString(num7.Value));
                }

                case StorageType.SqlBytes:
                    return(Convert.ToBase64String(((SqlBytes)value).Value));

                case StorageType.SqlChars:
                    return(new string(((SqlChars)value).Value));

                case StorageType.SqlDateTime:
                {
                    SqlDateTime time = (SqlDateTime)value;
                    return(XmlConvert.ToString(time.Value, XmlDateTimeSerializationMode.RoundtripKind));
                }

                case StorageType.SqlDecimal:
                {
                    SqlDecimal num6 = (SqlDecimal)value;
                    return(num6.ToString());
                }

                case StorageType.SqlDouble:
                {
                    SqlDouble num5 = (SqlDouble)value;
                    return(XmlConvert.ToString(num5.Value));
                }

                case StorageType.SqlGuid:
                {
                    SqlGuid guid = (SqlGuid)value;
                    return(XmlConvert.ToString(guid.Value));
                }

                case StorageType.SqlInt16:
                {
                    SqlInt16 num4 = (SqlInt16)value;
                    return(XmlConvert.ToString(num4.Value));
                }

                case StorageType.SqlInt32:
                {
                    SqlInt32 num3 = (SqlInt32)value;
                    return(XmlConvert.ToString(num3.Value));
                }

                case StorageType.SqlInt64:
                {
                    SqlInt64 num2 = (SqlInt64)value;
                    return(XmlConvert.ToString(num2.Value));
                }

                case StorageType.SqlMoney:
                {
                    SqlMoney money = (SqlMoney)value;
                    return(XmlConvert.ToString(money.Value));
                }

                case StorageType.SqlSingle:
                {
                    SqlSingle num = (SqlSingle)value;
                    return(XmlConvert.ToString(num.Value));
                }

                case StorageType.SqlString:
                {
                    SqlString str = (SqlString)value;
                    return(str.Value);
                }
                }
                IConvertible convertible = value as IConvertible;
                if (convertible != null)
                {
                    return(convertible.ToString(CultureInfo.InvariantCulture));
                }
                IFormattable formattable = value as IFormattable;
                if (formattable != null)
                {
                    return(formattable.ToString(null, CultureInfo.InvariantCulture));
                }
                return(value.ToString());
            }
            }
            return((TimeSpan)value);
        }
        public static object ChangeType2(object value, StorageType stype, Type type, IFormatProvider formatProvider)
        {
            switch (stype)
            {
            case StorageType.SqlBinary:
                return(ConvertToSqlBinary(value));

            case StorageType.SqlBoolean:
                return(ConvertToSqlBoolean(value));

            case StorageType.SqlByte:
                return(ConvertToSqlByte(value));

            case StorageType.SqlBytes:
                return(ConvertToSqlBytes(value));

            case StorageType.SqlChars:
                return(ConvertToSqlChars(value));

            case StorageType.SqlDateTime:
                return(ConvertToSqlDateTime(value));

            case StorageType.SqlDecimal:
                return(ConvertToSqlDecimal(value));

            case StorageType.SqlDouble:
                return(ConvertToSqlDouble(value));

            case StorageType.SqlGuid:
                return(ConvertToSqlGuid(value));

            case StorageType.SqlInt16:
                return(ConvertToSqlInt16(value));

            case StorageType.SqlInt32:
                return(ConvertToSqlInt32(value));

            case StorageType.SqlInt64:
                return(ConvertToSqlInt64(value));

            case StorageType.SqlMoney:
                return(ConvertToSqlMoney(value));

            case StorageType.SqlSingle:
                return(ConvertToSqlSingle(value));

            case StorageType.SqlString:
                return(ConvertToSqlString(value));

            default:
            {
                if ((DBNull.Value == value) || (value == null))
                {
                    return(DBNull.Value);
                }
                Type        dataType    = value.GetType();
                StorageType storageType = DataStorage.GetStorageType(dataType);
                switch (storageType)
                {
                case StorageType.SqlBinary:
                case StorageType.SqlBoolean:
                case StorageType.SqlByte:
                case StorageType.SqlBytes:
                case StorageType.SqlChars:
                case StorageType.SqlDateTime:
                case StorageType.SqlDecimal:
                case StorageType.SqlDouble:
                case StorageType.SqlGuid:
                case StorageType.SqlInt16:
                case StorageType.SqlInt32:
                case StorageType.SqlInt64:
                case StorageType.SqlMoney:
                case StorageType.SqlSingle:
                case StorageType.SqlString:
                    throw ExceptionBuilder.ConvertFailed(dataType, type);
                }
                if (StorageType.String != stype)
                {
                    if (StorageType.TimeSpan == stype)
                    {
                        switch (storageType)
                        {
                        case StorageType.Int32:
                            return(new TimeSpan((long)((int)value)));

                        case StorageType.Int64:
                            return(new TimeSpan((long)value));

                        case StorageType.String:
                            return(XmlConvert.ToTimeSpan((string)value));
                        }
                        return((TimeSpan)value);
                    }
                    if (StorageType.DateTimeOffset == stype)
                    {
                        return((DateTimeOffset)value);
                    }
                    if (StorageType.String == storageType)
                    {
                        switch (stype)
                        {
                        case StorageType.Boolean:
                            if (!("1" == ((string)value)))
                            {
                                if ("0" == ((string)value))
                                {
                                    return(false);
                                }
                                break;
                            }
                            return(true);

                        case StorageType.Char:
                            return(((IConvertible)((string)value)).ToChar(formatProvider));

                        case StorageType.SByte:
                            return(((IConvertible)((string)value)).ToSByte(formatProvider));

                        case StorageType.Byte:
                            return(((IConvertible)((string)value)).ToByte(formatProvider));

                        case StorageType.Int16:
                            return(((IConvertible)((string)value)).ToInt16(formatProvider));

                        case StorageType.UInt16:
                            return(((IConvertible)((string)value)).ToUInt16(formatProvider));

                        case StorageType.Int32:
                            return(((IConvertible)((string)value)).ToInt32(formatProvider));

                        case StorageType.UInt32:
                            return(((IConvertible)((string)value)).ToUInt32(formatProvider));

                        case StorageType.Int64:
                            return(((IConvertible)((string)value)).ToInt64(formatProvider));

                        case StorageType.UInt64:
                            return(((IConvertible)((string)value)).ToUInt64(formatProvider));

                        case StorageType.Single:
                            return(((IConvertible)((string)value)).ToSingle(formatProvider));

                        case StorageType.Double:
                            return(((IConvertible)((string)value)).ToDouble(formatProvider));

                        case StorageType.Decimal:
                            return(((IConvertible)((string)value)).ToDecimal(formatProvider));

                        case StorageType.DateTime:
                            return(((IConvertible)((string)value)).ToDateTime(formatProvider));

                        case StorageType.TimeSpan:
                            return(XmlConvert.ToTimeSpan((string)value));

                        case StorageType.String:
                            return((string)value);

                        case StorageType.Guid:
                            return(XmlConvert.ToGuid((string)value));

                        case StorageType.Uri:
                            return(new Uri((string)value));
                        }
                    }
                    goto Label_057D;
                }
                switch (storageType)
                {
                case StorageType.Boolean:
                    return(((bool)value).ToString(formatProvider));

                case StorageType.Char:
                    return(((char)value).ToString(formatProvider));

                case StorageType.SByte:
                    return(((sbyte)value).ToString(formatProvider));

                case StorageType.Byte:
                    return(((byte)value).ToString(formatProvider));

                case StorageType.Int16:
                    return(((short)value).ToString(formatProvider));

                case StorageType.UInt16:
                    return(((ushort)value).ToString(formatProvider));

                case StorageType.Int32:
                    return(((int)value).ToString(formatProvider));

                case StorageType.UInt32:
                    return(((uint)value).ToString(formatProvider));

                case StorageType.Int64:
                    return(((long)value).ToString(formatProvider));

                case StorageType.UInt64:
                    return(((ulong)value).ToString(formatProvider));

                case StorageType.Single:
                    return(((float)value).ToString(formatProvider));

                case StorageType.Double:
                    return(((double)value).ToString(formatProvider));

                case StorageType.Decimal:
                    return(((decimal)value).ToString(formatProvider));

                case StorageType.DateTime:
                    return(((DateTime)value).ToString(formatProvider));

                case StorageType.TimeSpan:
                    return(XmlConvert.ToString((TimeSpan)value));

                case StorageType.String:
                    return((string)value);

                case StorageType.Guid:
                    return(XmlConvert.ToString((Guid)value));

                case StorageType.CharArray:
                    return(new string((char[])value));

                case StorageType.DateTimeOffset:
                {
                    DateTimeOffset offset = (DateTimeOffset)value;
                    return(offset.ToString(formatProvider));
                }

                case StorageType.BigInteger:
                    goto Label_057D;
                }
                break;
            }
            }
            IConvertible convertible = value as IConvertible;

            if (convertible != null)
            {
                return(convertible.ToString(formatProvider));
            }
            IFormattable formattable = value as IFormattable;

            if (formattable != null)
            {
                return(formattable.ToString(null, formatProvider));
            }
            return(value.ToString());

Label_057D:
            return(Convert.ChangeType(value, type, formatProvider));
        }