| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796 |
- //------------------------------------------------------------------------------
- // <copyright file="SQLConvert.cs" company="Microsoft">
- // Copyright (c) Microsoft Corporation. All rights reserved.
- // </copyright>
- // <owner current="true" primary="true">Microsoft</owner>
- // <owner current="true" primary="false">Microsoft</owner>
- //------------------------------------------------------------------------------
- namespace System.Data.Common {
- using System;
- using System.Data.SqlTypes;
- using System.Xml;
- using System.Globalization;
- using System.Diagnostics;
- internal static class SqlConvert {
- 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));
- }
- }
- 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 (Int16)value;
- case StorageType.SqlByte:
- return (SqlByte) value;
- case StorageType.SqlInt16:
- return (SqlInt16) value;
- default:
- throw ExceptionBuilder.ConvertFailed(valueType, typeof(SqlInt16));
- }
- }
- public static SqlInt32 ConvertToSqlInt32(object value) {
- Debug.Assert(value != null, "null argument in ConvertToSqlInt32");
- if (value == DBNull.Value) {
- return SqlInt32.Null;
- }
- Type valueType = value.GetType();
- StorageType stype = DataStorage.GetStorageType(valueType);
- switch(stype) {
- case StorageType.SqlInt32:
- return (SqlInt32) value;
- case StorageType.Int32:
- return (int) value;
- case StorageType.SqlInt16:
- return (SqlInt16)value;
- case StorageType.Int16:
- return (Int16) value;
- case StorageType.UInt16:
- return (UInt16) value;
- case StorageType.SqlByte:
- return (SqlByte)value;
- case StorageType.Byte:
- return (byte)value;
- default:
- throw ExceptionBuilder.ConvertFailed(valueType, typeof(SqlInt32));
- }
- }
- public static SqlInt64 ConvertToSqlInt64(object value) {
- Debug.Assert(value != null, "null argument in ConvertToSqlInt64");
- if (value == DBNull.Value) {
- return SqlInt32.Null;
- }
- Type valueType = value.GetType();
- StorageType stype = DataStorage.GetStorageType(valueType);
- switch(stype) {
- case StorageType.SqlInt64:
- return (SqlInt64) value;
- case StorageType.Int64:
- return (Int64) value;
- case StorageType.SqlInt16:
- return (SqlInt16)value;
- case StorageType.Int16:
- return (Int16)value;
- case StorageType.UInt16:
- return (UInt16)value;
- case StorageType.SqlInt32:
- return (SqlInt32)value;
- case StorageType.Int32:
- return (Int32)value;
- case StorageType.UInt32:
- return (UInt32)value;
- case StorageType.SqlByte:
- return (SqlByte)value;
- case StorageType.Byte:
- return (byte)value;
- default:
- throw ExceptionBuilder.ConvertFailed(valueType, typeof(SqlInt64));
- }
- }
- public static SqlDouble ConvertToSqlDouble(object value) {
- Debug.Assert(value != null, "null argument in ConvertToSqlDouble");
- if (value == DBNull.Value) {
- return SqlDouble.Null;
- }
- Type valueType = value.GetType();
- StorageType stype = DataStorage.GetStorageType(valueType);
- switch(stype) {
- case StorageType.SqlDouble:
- return (SqlDouble)value;
- case StorageType.Double:
- return (double)value;
- case StorageType.SqlInt64:
- return (SqlInt64) value;
- case StorageType.Int64:
- return (Int64) value;
- case StorageType.UInt64:
- return (UInt64) value;
- case StorageType.SqlInt16:
- return (SqlInt16)value;
- case StorageType.Int16:
- return (Int16)value;
- case StorageType.UInt16:
- return (UInt16)value;
- case StorageType.SqlInt32:
- return (SqlInt32)value;
- case StorageType.Int32:
- return (Int32)value;
- case StorageType.UInt32:
- return (UInt32)value;
- case StorageType.SqlByte:
- return (SqlByte)value;
- case StorageType.Byte:
- return (byte)value;
- case StorageType.SqlSingle:
- return (SqlSingle)value;
- case StorageType.Single:
- return (Single)value;
- case StorageType.SqlMoney:
- return (SqlMoney)value;
- case StorageType.SqlDecimal:
- return (SqlDecimal)value;
- default:
- throw ExceptionBuilder.ConvertFailed(valueType, typeof(SqlDouble));
- }
- }
- 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 (Int64) value;
- case StorageType.UInt64:
- return (UInt64) value;
- case StorageType.SqlInt16:
- return (SqlInt16)value;
- case StorageType.Int16:
- return (Int16)value;
- case StorageType.UInt16:
- return (UInt16)value;
- case StorageType.SqlInt32:
- return (SqlInt32)value;
- case StorageType.Int32:
- return (Int32)value;
- case StorageType.UInt32:
- return (UInt32)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) {
- Debug.Assert(value != null, "null argument in ConvertToSqlSingle");
- if (value == DBNull.Value) {
- return SqlSingle.Null;
- }
- Type valueType = value.GetType();
- StorageType stype = DataStorage.GetStorageType(valueType);
- switch(stype) {
- case StorageType.SqlSingle:
- return (SqlSingle)value;
- case StorageType.Single:
- return (Single)value;
- case StorageType.SqlInt64:
- return (SqlInt64) value;
- case StorageType.Int64:
- return (Int64) value;
- case StorageType.UInt64:
- return (UInt64) value;
- case StorageType.SqlInt16:
- return (SqlInt16)value;
- case StorageType.Int16:
- return (Int16)value;
- case StorageType.UInt16:
- return (UInt16)value;
- case StorageType.SqlInt32:
- return (SqlInt32)value;
- case StorageType.Int32:
- return (Int32)value;
- case StorageType.UInt32:
- return (UInt32)value;
- case StorageType.SqlByte:
- return (SqlByte)value;
- case StorageType.Byte:
- return (byte)value;
- case StorageType.SqlMoney:
- return (SqlMoney)value;
- case StorageType.SqlDecimal:
- return (SqlDecimal)value;
- default:
- throw ExceptionBuilder.ConvertFailed(valueType, typeof(SqlSingle));
- }
- }
- public static SqlMoney ConvertToSqlMoney(object value) {
- Debug.Assert(value != null, "null argument in ConvertToSqlMoney");
- if (value == DBNull.Value) {
- return SqlMoney.Null;
- }
- Type valueType = value.GetType();
- StorageType stype = DataStorage.GetStorageType(valueType);
- switch(stype) {
- case StorageType.SqlMoney:
- return (SqlMoney)value;
- case StorageType.Decimal:
- return (decimal)value;
- case StorageType.SqlInt64:
- return (SqlInt64) value;
- case StorageType.Int64:
- return (Int64) value;
- case StorageType.UInt64:
- return (UInt64) value;
- case StorageType.SqlInt16:
- return (SqlInt16)value;
- case StorageType.Int16:
- return (Int16)value;
- case StorageType.UInt16:
- return (UInt16)value;
- case StorageType.SqlInt32:
- return (SqlInt32)value;
- case StorageType.Int32:
- return (Int32)value;
- case StorageType.UInt32:
- return (UInt32)value;
- case StorageType.SqlByte:
- return (SqlByte)value;
- case StorageType.Byte:
- return (byte)value;
- default:
- throw ExceptionBuilder.ConvertFailed(valueType, typeof(SqlMoney));
- }
- }
- public static SqlDateTime ConvertToSqlDateTime(object value) {
- Debug.Assert(value != null, "null argument in ConvertToSqlDateTime");
- if (value == DBNull.Value) {
- return SqlDateTime.Null;
- }
- Type valueType = value.GetType();
- StorageType stype = DataStorage.GetStorageType(valueType);
- switch(stype) {
- case StorageType.SqlDateTime:
- return (SqlDateTime)value;
- case StorageType.DateTime:
- return (DateTime) value;
- default:
- throw ExceptionBuilder.ConvertFailed(valueType, typeof(SqlDateTime));
- }
- }
- 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));
- }
- }
- public static SqlGuid ConvertToSqlGuid(object value) {
- Debug.Assert(value != null, "null argument in ConvertToSqlGuid");
- if (value == DBNull.Value) {
- return SqlGuid.Null;
- }
- Type valueType = value.GetType();
- StorageType stype = DataStorage.GetStorageType(valueType);
- switch(stype) {
- case StorageType.SqlGuid:
- return (SqlGuid)value;
- case StorageType.Guid:
- return (Guid) value;
- default:
- throw ExceptionBuilder.ConvertFailed(valueType, typeof(SqlGuid));
- }
- }
- 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));
- }
- }
- public static SqlString ConvertToSqlString(object value) {
- Debug.Assert(value != null, "null argument in ConvertToSqlString");
- if ((value == DBNull.Value) || (value == null)) {
- return SqlString.Null;
- }
- Type valueType = value.GetType();
- StorageType stype = DataStorage.GetStorageType(valueType);
- switch(stype) {
- case StorageType.SqlString:
- return (SqlString)value;
- case StorageType.String:
- return (string)value;
- default:
- throw ExceptionBuilder.ConvertFailed(valueType, typeof(SqlString));
- }
- }
- 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 SqlBytes ConvertToSqlBytes(object value) {
- Debug.Assert(value != null, "null argument in ConvertToSqlBytes");
- if (value == DBNull.Value) {
- return SqlBytes.Null;
- }
- Type valueType = value.GetType();
- StorageType stype = DataStorage.GetStorageType(valueType);
- switch(stype) {
- case StorageType.SqlBytes:
- return (SqlBytes)value;
- default:
- throw ExceptionBuilder.ConvertFailed(valueType, typeof(SqlBytes));
- }
- }
- public static DateTimeOffset ConvertStringToDateTimeOffset(string value, IFormatProvider formatProvider) {
- return DateTimeOffset.Parse(value, formatProvider);
- }
- // 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);
- }
- // 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 ((IConvertible)(SByte)value).ToString(formatProvider);
- case StorageType.Byte:
- return ((IConvertible)(Byte)value).ToString(formatProvider);
- case StorageType.Int16:
- return ((IConvertible)(Int16)value).ToString(formatProvider);
- case StorageType.UInt16:
- return ((IConvertible)(UInt16)value).ToString(formatProvider);
- case StorageType.Int32:
- return ((IConvertible)(Int32)value).ToString(formatProvider);
- case StorageType.UInt32:
- return ((IConvertible)(UInt32)value).ToString(formatProvider);
- case StorageType.Int64:
- return ((IConvertible)(Int64)value).ToString(formatProvider);
- case StorageType.UInt64:
- return ((IConvertible)(UInt64)value).ToString(formatProvider);
- case StorageType.Single:
- return ((IConvertible)(Single)value).ToString(formatProvider);
- case StorageType.Double:
- return ((IConvertible)(Double)value).ToString(formatProvider);
- case StorageType.Decimal:
- return ((IConvertible)(Decimal)value).ToString(formatProvider);
- case StorageType.DateTime:
- return ((IConvertible)(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((string)null, formatProvider);
- }
- return value.ToString();
- }
- }
- else if (StorageType.TimeSpan == stype) { // destination is TimeSpan
- //WebData 110216, Handle TimeSpan convert the same way as we handle in storage
- switch(vtype) {
- case StorageType.String:
- return XmlConvert.ToTimeSpan((string) value);
- case StorageType.Int32:
- return new TimeSpan((Int64)(Int32)value);
- case StorageType.Int64:
- return new TimeSpan((Int64)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);
- }
- }
- }
- // 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:
- //WebData 110216, Handle TimeSpan convert the same way as we handle in storage
- switch(vtype) {
- case StorageType.String:
- return XmlConvert.ToTimeSpan((string) value);
- case StorageType.Int32:
- return new TimeSpan((Int64)(Int32)value);
- case StorageType.Int64:
- return new TimeSpan((Int64)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((Int16) value);
- case StorageType.UInt16:
- return XmlConvert.ToString((UInt16) value);
- case StorageType.Int32:
- return XmlConvert.ToString((Int32) value);
- case StorageType.UInt32:
- return XmlConvert.ToString((UInt32) value);
- case StorageType.Int64:
- return XmlConvert.ToString((Int64) value);
- case StorageType.UInt64:
- return XmlConvert.ToString((UInt64) value);
- case StorageType.Single:
- return XmlConvert.ToString((Single) 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((string)null, System.Globalization.CultureInfo.InvariantCulture);
- }
- return value.ToString();
- }
- }
- }
- }
- }
- }
|