/// <summary> /// Конвертирует значение параметра из строки /// </summary> public Object ValueFromString(String value, SqlDbType type, ValueDbStyle style) { try { if (style == ValueDbStyle.Xml) switch (type) { case SqlDbType.BigInt: return new SqlInt64(XmlConvert.ToInt64(value)); case SqlDbType.Binary: return new SqlBytes(Convert.FromBase64String(value)); case SqlDbType.Bit: return new SqlBoolean(XmlConvert.ToBoolean(value)); case SqlDbType.Char: return new SqlString(value); case SqlDbType.Date: return XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.RoundtripKind).Date; case SqlDbType.DateTime: return new SqlDateTime(XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.RoundtripKind)); case SqlDbType.DateTime2: return XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.RoundtripKind); case SqlDbType.Time: TimeSpan resultTime; return TimeSpan.TryParse(value, out resultTime) ? resultTime : XmlConvert.ToTimeSpan(value); case SqlDbType.DateTimeOffset: return XmlConvert.ToDateTimeOffset(value); // Not support SqlDbType.Timestamp case SqlDbType.Decimal: return new SqlDecimal(XmlConvert.ToDecimal(value)); case SqlDbType.Float: return new SqlDouble(XmlConvert.ToDouble(value)); // Not support SqlDbType.Image case SqlDbType.Int: return new SqlInt32(XmlConvert.ToInt32(value)); case SqlDbType.Money: return new SqlMoney(XmlConvert.ToDecimal(value)); case SqlDbType.NChar: return new SqlString(value); // Not support SqlDbType.NText case SqlDbType.NVarChar: return new SqlString(value); case SqlDbType.Real: return new SqlSingle(XmlConvert.ToDouble(value)); case SqlDbType.SmallDateTime: return new SqlDateTime(XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.RoundtripKind)); case SqlDbType.SmallInt: return new SqlInt16(XmlConvert.ToInt16(value)); case SqlDbType.SmallMoney: return new SqlMoney(XmlConvert.ToDecimal(value)); // Not support SqlDbType.Structured // Not support SqlDbType.Text case SqlDbType.TinyInt: return new SqlByte(XmlConvert.ToByte(value)); case SqlDbType.UniqueIdentifier: return new SqlGuid(XmlConvert.ToGuid(value)); case SqlDbType.VarBinary: return new SqlBytes(Convert.FromBase64String(value)); case SqlDbType.VarChar: return new SqlString(value); // Not support SqlDbType.Variant case SqlDbType.Xml: { XmlReader r = XmlReader.Create(new System.IO.StringReader(value)); return new SqlXml(r); } //case SqlDbType.Udt: // { // TParams result = (TParams)System.Activator.CreateInstance(this.GetType()); // XmlReader r = XmlReader.Create(new System.IO.StringReader(value)); // result.ReadXml(r); // return result; // } } else if (style == ValueDbStyle.Text) { switch (type) { case SqlDbType.BigInt: return (SqlInt64)Int64.Parse(value, CultureInfo); case SqlDbType.Binary: return new SqlBytes(Convert.FromBase64String(value)); case SqlDbType.Bit: return SqlBoolean.Parse(value); case SqlDbType.Char: return new SqlString(value); case SqlDbType.Date: return DateTime.ParseExact(value, DateTimeFormats, CultureInfo, DateTimeStyles.RoundtripKind).Date; case SqlDbType.DateTime: return (SqlDateTime)DateTime.ParseExact(value, DateTimeFormats, CultureInfo, DateTimeStyles.RoundtripKind); case SqlDbType.DateTime2: return DateTime.ParseExact(value, DateTimeFormats, CultureInfo, DateTimeStyles.RoundtripKind); case SqlDbType.Decimal: return (SqlDecimal)Decimal.Parse(value, CultureInfo); case SqlDbType.Float: return (SqlDouble)Double.Parse(value, CultureInfo); // Not support SqlDbType.Image case SqlDbType.Int: return (SqlInt32)Int32.Parse(value, CultureInfo); case SqlDbType.Money: return (SqlMoney)Decimal.Parse(value, CultureInfo); case SqlDbType.NChar: return new SqlString(value); // Not support SqlDbType.NText case SqlDbType.NVarChar: return new SqlString(value); case SqlDbType.Real: return (SqlSingle)Double.Parse(value, CultureInfo); case SqlDbType.SmallDateTime: return (SqlDateTime)DateTime.ParseExact(value, DateTimeFormats, CultureInfo, DateTimeStyles.RoundtripKind); case SqlDbType.SmallInt: return (SqlInt16)Int16.Parse(value, cultureInfo); case SqlDbType.SmallMoney: return (SqlMoney)Decimal.Parse(value, CultureInfo); // Not support SqlDbType.Structured // Not support SqlDbType.Text case SqlDbType.Time: return TimeSpan.Parse(value); // Not support SqlDbType.Timestamp case SqlDbType.TinyInt: return (SqlByte)Byte.Parse(value, CultureInfo); case SqlDbType.UniqueIdentifier: return SqlGuid.Parse(value); case SqlDbType.VarBinary: return new SqlBytes(Convert.FromBase64String(value)); case SqlDbType.VarChar: return new SqlString(value); // Not support SqlDbType.Variant case SqlDbType.Xml: XmlReader r = XmlReader.Create(new System.IO.StringReader(value)); return new SqlXml(r); //case SqlDbType.Udt: // TParams result = (TParams)System.Activator.CreateInstance(this.GetType()); // result.FromString(value); // return result; } } throw new Exception("Системная ошибка"); // Сюда никогда не должно попасть } catch { throw new Exception(String.Format("Не удалось сконвертировать значение '{0}' в тип {1}", value, type.ToString())); } }
/// <summary> /// Конвертирует значение параметра в строку /// </summary> public String ValueToString(Object value, ValueDbStyle style) { SqlDbType type = GetSqlType(value); if (style == ValueDbStyle.Xml) switch (type) { case SqlDbType.BigInt: return XmlConvert.ToString((Int64)(SqlInt64)value); case SqlDbType.Binary: return Convert.ToBase64String(((SqlBytes)value).Value); case SqlDbType.Bit: return (Boolean)(SqlBoolean)value ? "1" : "0"; case SqlDbType.Char: return (String)(SqlString)value; case SqlDbType.Date: return XmlConvert.ToString((DateTime)value, XmlDateTimeSerializationMode.RoundtripKind); case SqlDbType.DateTime: return XmlConvert.ToString((DateTime)(SqlDateTime)value, XmlDateTimeSerializationMode.RoundtripKind); case SqlDbType.SmallDateTime: return XmlConvert.ToString((DateTime)(SqlDateTime)value, XmlDateTimeSerializationMode.RoundtripKind); case SqlDbType.DateTime2: return XmlConvert.ToString((DateTime)value, XmlDateTimeSerializationMode.RoundtripKind); case SqlDbType.Time: return Convert.ToString((TimeSpan)value); // XmlConvert.ToString((TimeSpan)value); case SqlDbType.DateTimeOffset: return XmlConvert.ToString((DateTimeOffset)value); case SqlDbType.Decimal: return XmlConvert.ToString((Decimal)(SqlDecimal)value); case SqlDbType.Float: return XmlConvert.ToString((Double)(SqlDouble)value); case SqlDbType.Int: return XmlConvert.ToString((Int32)(SqlInt32)value); case SqlDbType.Money: return XmlConvert.ToString((Decimal)(SqlMoney)value); case SqlDbType.NChar: return (String)(SqlString)value; case SqlDbType.NVarChar: return (String)(SqlString)value; case SqlDbType.Real: return XmlConvert.ToString((Double)(SqlSingle)value); case SqlDbType.SmallInt: return XmlConvert.ToString((Int16)(SqlInt16)value); case SqlDbType.SmallMoney: return XmlConvert.ToString((Decimal)(SqlMoney)value); case SqlDbType.TinyInt: return XmlConvert.ToString((Byte)(SqlByte)value); case SqlDbType.UniqueIdentifier: return XmlConvert.ToString((Guid)(SqlGuid)value).ToUpper(); case SqlDbType.VarBinary: return Convert.ToBase64String(((SqlBytes)value).Value); case SqlDbType.VarChar: return (String)(SqlString)value; case SqlDbType.Xml: return ((SqlXml)value).Value; case SqlDbType.Udt: return value.ToString(); // Not support SqlDbType.Image // Not support SqlDbType.NText // Not support SqlDbType.Structured // Not support SqlDbType.Text // Not support SqlDbType.Timestamp // Not support SqlDbType.Variant } else if (style == ValueDbStyle.Text) { switch (type) { case SqlDbType.Bit: return Convert.ToString((Boolean)(SqlBoolean)value, CultureInfo); case SqlDbType.TinyInt: return Convert.ToString((Byte)(SqlByte)value, CultureInfo); case SqlDbType.SmallInt: return Convert.ToString((Int16)(SqlInt16)value, CultureInfo); case SqlDbType.Int: return Convert.ToString((Int32)(SqlInt32)value, CultureInfo); case SqlDbType.BigInt: return Convert.ToString((Int64)(SqlInt64)value, CultureInfo); case SqlDbType.Binary: return Convert.ToBase64String(((SqlBytes)value).Value); case SqlDbType.Char: return ((SqlString)value).ToString(); case SqlDbType.Decimal: return Convert.ToString((Decimal)(SqlDecimal)value, CultureInfo); case SqlDbType.Float: return Convert.ToString((Double)(SqlDouble)value, CultureInfo); case SqlDbType.Date: return ((DateTime)value).ToString(CultureInfo.DateTimeFormat.ShortDatePattern, CultureInfo); case SqlDbType.DateTime: return Convert.ToString((DateTime)(SqlDateTime)value, CultureInfo); case SqlDbType.SmallDateTime: return Convert.ToString((DateTime)(SqlDateTime)value, CultureInfo); case SqlDbType.DateTime2: return Convert.ToString((DateTime)value, CultureInfo); case SqlDbType.Time: return Convert.ToString((TimeSpan)value, CultureInfo); case SqlDbType.DateTimeOffset: return Convert.ToString((DateTimeOffset)value, CultureInfo); // Not support SqlDbType.Image case SqlDbType.Money: return Convert.ToString((Decimal)(SqlMoney)value, CultureInfo); case SqlDbType.NChar: return ((SqlString)value).ToString(); // Not support SqlDbType.NText case SqlDbType.NVarChar: return ((SqlString)value).ToString(); case SqlDbType.Real: return Convert.ToString((Double)(SqlSingle)value, CultureInfo); case SqlDbType.SmallMoney: return Convert.ToString((Decimal)(SqlMoney)value, CultureInfo); // Not support SqlDbType.Structured // Not support SqlDbType.Text // Not support SqlDbType.Timestamp case SqlDbType.UniqueIdentifier: return ((SqlGuid)value).ToString(); case SqlDbType.VarBinary: return Convert.ToBase64String(((SqlBytes)value).Value); case SqlDbType.VarChar: return ((SqlString)value).ToString(); // Not support SqlDbType.Variant case SqlDbType.Xml: return ((SqlXml)value).Value; case SqlDbType.Udt: return value.ToString(); } } throw new Exception("Системная ошибка"); // Сюда никогда не должно попасть }
/// <summary> /// Конвертирует значение параметра в строку /// </summary> public static String ValueToString(Object value, ValueDbStyle style) { SqlDbType type = GetSqlType(value); switch (type) { case SqlDbType.Bit : return ((SqlBoolean)value).IsTrue ? "1" : "0"; case SqlDbType.TinyInt : return XmlConvert.ToString((Byte)(SqlByte)value); case SqlDbType.SmallInt : return XmlConvert.ToString((Int16)(SqlInt16)value); case SqlDbType.Int : return XmlConvert.ToString((Int32)(SqlInt32)value); case SqlDbType.BigInt : return XmlConvert.ToString((Int64)(SqlInt64)value); case SqlDbType.Char : case SqlDbType.VarChar : //return ((SqlAnsiString)value).ToString(); case SqlDbType.NChar : case SqlDbType.NVarChar : if(value is SqlChars) return (String)((SqlChars)value).ToSqlString().Value; else return (String)(SqlString)value; case SqlDbType.Binary : case SqlDbType.VarBinary : return (value is SqlBinary) ? Convert.ToBase64String(((SqlBinary)value).Value, Base64FormattingOptions.None) : Convert.ToBase64String(((SqlBytes)value).Value, Base64FormattingOptions.None); case SqlDbType.DateTime : return (style == ValueDbStyle.XML) ? XmlConvert.ToString((DateTime)(SqlDateTime)value, XmlDateTimeSerializationMode.RoundtripKind) : (style == ValueDbStyle.SQL) ? ((DateTime)(SqlDateTime)value).ToString(SQLDateTimePattern, CultureInfo.InvariantCulture) : ((DateTime)(SqlDateTime)value).ToString(TextDateTimePattern, CultureInfo.InvariantCulture); case SqlDbType.Date : return (style == ValueDbStyle.XML) ? XmlConvert.ToString((DateTime)value, XMLDatePattern) : (style == ValueDbStyle.SQL)? ((DateTime)value).ToString(SQLDatePattern, CultureInfo.InvariantCulture) : ((DateTime)value).ToString(TextDatePattern, CultureInfo.InvariantCulture); case SqlDbType.DateTime2 : return (style == ValueDbStyle.XML)? XmlConvert.ToString((DateTime)value, XmlDateTimeSerializationMode.RoundtripKind) : (style == ValueDbStyle.SQL)? ((DateTime)value).ToString(SQLDateTimePattern, CultureInfo.InvariantCulture) : ((DateTime)value).ToString(TextDateTimePattern, CultureInfo.InvariantCulture); case SqlDbType.SmallDateTime : return (style == ValueDbStyle.XML)? XmlConvert.ToString((DateTime)value, XmlDateTimeSerializationMode.RoundtripKind) : (style == ValueDbStyle.SQL)? ((DateTime)value).ToString(TextSmallDateTimePattern, CultureInfo.InvariantCulture) : ((DateTime)value).ToString(SQLSmallDateTimePattern, CultureInfo.InvariantCulture); case SqlDbType.DateTimeOffset : return (style == ValueDbStyle.XML)? XmlConvert.ToString((DateTimeOffset)value) : (style == ValueDbStyle.SQL) ? ((DateTimeOffset)value).ToString(SQLDateTimeOffsetPattern, CultureInfo.InvariantCulture) : ((DateTimeOffset)value).ToString(TextDateTimeOffsetPattern, CultureInfo.InvariantCulture); case SqlDbType.Time: return Convert.ToString((TimeSpan)value); //case SqlDbType.Date: return ((DateTime)value).ToString(CultureInfo.DateTimeFormat.ShortDatePattern, CultureInfo); //case SqlDbType.DateTime: return Convert.ToString((DateTime)(SqlDateTime)value, CultureInfo); //case SqlDbType.SmallDateTime: return Convert.ToString((DateTime)(SqlDateTime)value, CultureInfo); //case SqlDbType.DateTime2: return Convert.ToString((DateTime)value, CultureInfo); //case SqlDbType.Time: return Convert.ToString((TimeSpan)value, CultureInfo); //case SqlDbType.DateTimeOffset: return Convert.ToString((DateTimeOffset)value, CultureInfo); case SqlDbType.Float : return XmlConvert.ToString((Double)(SqlDouble)value); case SqlDbType.Real : return XmlConvert.ToString((Double)(SqlSingle)value); case SqlDbType.SmallMoney : return XmlConvert.ToString((Decimal)(SqlMoney)value); case SqlDbType.Money : return XmlConvert.ToString((Decimal)(SqlMoney)value); case SqlDbType.Decimal : return XmlConvert.ToString((Decimal)(SqlDecimal)value); case SqlDbType.UniqueIdentifier : return XmlConvert.ToString((Guid)(SqlGuid)value).ToUpper(); case SqlDbType.Xml : return ((SqlXml)value).Value; case SqlDbType.Udt : return value.ToString(); // Not support SqlDbType.Image // Not support SqlDbType.NText // Not support SqlDbType.Structured // Not support SqlDbType.Text // Not support SqlDbType.Timestamp // Not support SqlDbType.Variant } throw new Exception("Системная ошибка"); // Сюда никогда не должно попасть }
/// <summary> /// Конвертирует значение параметра в текст /// </summary> public static String ValueToText(Object AValue, ValueDbStyle AStyle, Char AQuote) { String LResult = ValueToString(AValue, AStyle); if (IsQuoteType(GetSqlType(AValue))) LResult = Strings.Quote(LResult, AQuote); return LResult; }
/// <summary> /// Конвертирует значение параметра из строки /// </summary> public static Object ValueFromString(String value, SqlDbType type, ValueDbStyle style) { try { // if (style == ValueDbStyle.XML) switch (type) { case SqlDbType.Bit : return new SqlBoolean(XmlConvert.ToBoolean(value)); case SqlDbType.TinyInt : return new SqlByte(XmlConvert.ToByte(value)); case SqlDbType.SmallInt : return new SqlInt16(XmlConvert.ToInt16(value)); case SqlDbType.Int : return new SqlInt32(XmlConvert.ToInt32(value)); case SqlDbType.BigInt : return new SqlInt64(XmlConvert.ToInt64(value)); case SqlDbType.Char : case SqlDbType.VarChar : //return new SqlAnsiString(value); case SqlDbType.NChar : case SqlDbType.NVarChar : return new SqlString(value); case SqlDbType.Binary : case SqlDbType.VarBinary: return new SqlBytes(Convert.FromBase64String(value)); case SqlDbType.Date : return (style == ValueDbStyle.XML)? XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.RoundtripKind).Date : (style == ValueDbStyle.SQL)? DateTime.ParseExact(value, SQLDateFormats, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind).Date : DateTime.ParseExact(value, DateTimeFormats, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind).Date; case SqlDbType.SmallDateTime : case SqlDbType.DateTime : case SqlDbType.DateTime2 : DateTime LDateTime = ( (style == ValueDbStyle.XML)? XmlConvert.ToDateTime(value, XmlDateTimeSerializationMode.RoundtripKind) : (style == ValueDbStyle.SQL)? DateTime.ParseExact(value, SQLDateTimeFormats, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind) : DateTime.ParseExact(value, DateTimeFormats, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind) ); if(type == SqlDbType.DateTime2) return LDateTime; else return new SqlDateTime(LDateTime); case SqlDbType.DateTimeOffset: return (style == ValueDbStyle.XML) ? XmlConvert.ToDateTimeOffset(value) : (style == ValueDbStyle.SQL) ? DateTimeOffset.ParseExact(value, SQLDateTimeOffsetPattern, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind | DateTimeStyles.AssumeUniversal) : DateTimeOffset.ParseExact(value, DateTimeFormats, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind | DateTimeStyles.AssumeUniversal); case SqlDbType.Time : TimeSpan resultTime; return TimeSpan.TryParse(value, out resultTime) ? resultTime : XmlConvert.ToTimeSpan(value); case SqlDbType.Decimal : return new SqlDecimal(XmlConvert.ToDecimal(value)); case SqlDbType.Float : return new SqlDouble(XmlConvert.ToDouble(value)); case SqlDbType.Real : return new SqlSingle(XmlConvert.ToDouble(value)); case SqlDbType.SmallMoney : return new SqlMoney(XmlConvert.ToDecimal(value)); case SqlDbType.Money : return new SqlMoney(XmlConvert.ToDecimal(value)); case SqlDbType.UniqueIdentifier: return new SqlGuid(XmlConvert.ToGuid(value)); case SqlDbType.Xml: { XmlReader r = XmlReader.Create(new System.IO.StringReader(value)); return new SqlXml(r); } //case SqlDbType.Udt: // { // TParams result = (TParams)System.Activator.CreateInstance(this.GetType()); // XmlReader r = XmlReader.Create(new System.IO.StringReader(value)); // result.ReadXml(r); // return result; // } // Not support SqlDbType.Variant // Not support SqlDbType.Structured // Not support SqlDbType.Text // Not support SqlDbType.Timestamp // Not support SqlDbType.Image // Not support SqlDbType.NText } throw new Exception("Системная ошибка"); // Сюда никогда не должно попасть } catch { throw new Exception(String.Format("Не удалось сконвертировать значение '{0}' в тип {1}", value, type.ToString())); } }