/// <summary> /// 将存储的数据转换为指定的类型。 /// </summary> /// <param name="value">要转换的值,格式为 name,size[unit][,style]。</param> /// <param name="dbType">数据列类型。</param> /// <returns>一个 <see cref="Font"/> 对象。</returns> /// <exception cref="ConverterNotSupportedException">如果不支持将 <see cref="Font"/> 类型的对象转换为指定的 dbType 数据时,引发此异常。</exception> public object ConvertFrom(object value, DbType dbType = DbType.String) { if (!dbType.IsStringDbType()) { throw new ConverterNotSupportedException(typeof(Font), dbType); } if (value.IsNullOrEmpty()) { return(null); } var array = value.ToString().Split(','); var style = FontStyle.Regular; float size; GraphicsUnit unit; ParseFontSizeAndUnit(array[1], out size, out unit); if (array.Length == 3) { style = ParseFontStyle(array[2]); } return(new Font(array[0], size, style, unit)); }
/// <summary> /// 将存储的数据转换为指定的类型。 /// </summary> /// <param name="value">要转换的值。</param> /// <param name="dbType">数据列类型。</param> /// <returns>一个数组。</returns> /// <exception cref="ConverterNotSupportedException">如果不支持将数组转换为指定的 dbType 数据时,引发此异常。</exception> public object ConvertFrom(object value, DbType dbType = DbType.String) { if (value == null || value == DBNull.Value) { return(null); } if (dbType.IsStringDbType()) { if (elementType == typeof(byte)) { try { return(Convert.FromBase64String(value.ToString())); } catch { return(null); } } else { var array = value.ToString().Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.ToType(elementType)).ToArray(); var result = Array.CreateInstance(elementType, array.Length); Array.Copy(array, result, array.Length); return(result); } } return(value); }
/// <summary> /// 将特殊对象转换为可存储到数据库的类型。 /// </summary> /// <param name="value">要存储的数组。</param> /// <param name="dbType">数据列类型。</param> /// <returns></returns> /// <exception cref="ConverterNotSupportedException">如果不支持将 dbType 类型的数据转换为数组时,引发此异常。</exception> public object ConvertTo(object value, DbType dbType = DbType.String) { if (dbType.IsStringDbType()) { #if !N35 if (elementType == typeof(string)) { return(string.Join(",", ((object[])value).Select(s => "'" + s + "'"))); } else { return(string.Join(",", (object[])value)); } #else if (elementType == typeof(string)) { return(string.Join(",", ((object[])value).Select(s => "'" + s + "'").ToArray())); } else { return(string.Join(",", ((object[])value).Select(s => s.ToString()).ToArray())); } #endif } return(value); }
/// <summary> /// 将特殊对象转换为可存储到数据库的类型。 /// </summary> /// <param name="value">要存储的 <see cref="CodedData"/> 对象。</param> /// <param name="dbType">数据列类型。</param> /// <returns>表示 <see cref="CodedData"/> 的字节数组。</returns> /// <exception cref="ConverterNotSupportedException">如果不支持将 dbType 类型的数据转换为 <see cref="CodedData"/> 类型的对象时,引发此异常。</exception> public virtual object ConvertTo(object value, DbType dbType = DbType.String) { if (dbType != DbType.Binary && !dbType.IsStringDbType()) { throw new ConverterNotSupportedException(typeof(CodedData), dbType); } var data = value as CodedData; if (dbType == DbType.Binary) { return(data == null ? new byte[0] : EncodeDataToBytes(data)); } else if (dbType.IsStringDbType()) { return(data == null ? string.Empty : EncodeDataToString(data)); } return(null); }
/// <summary> /// 将存储的数据转换为指定的类型。 /// </summary> /// <param name="value">要转换的值。</param> /// <param name="dbType">数据列类型。</param> /// <returns>一个数组。</returns> /// <exception cref="ConverterNotSupportedException">如果不支持将数组转换为指定的 dbType 数据时,引发此异常。</exception> public object ConvertFrom(object value, DbType dbType = DbType.String) { if (dbType.IsStringDbType()) { var array = value.ToString().Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(s => s.ToType(elementType)).ToArray(); var result = Array.CreateInstance(elementType, array.Length); Array.Copy(array, result, array.Length); return(result); } return(value); }
/// <summary> /// 将存储的数据转换为指定的类型。 /// </summary> /// <param name="value">要转换的值,格式为 x,y。</param> /// <param name="dbType">数据列类型。</param> /// <returns>一个 <see cref="Point"/> 对象。</returns> /// <exception cref="ConverterNotSupportedException">如果不支持将 <see cref="Point"/> 类型的对象转换为指定的 dbType 数据时,引发此异常。</exception> public object ConvertFrom(object value, DbType dbType = DbType.String) { if (!dbType.IsStringDbType()) { throw new ConverterNotSupportedException(typeof(Point), dbType); } if (value.IsNullOrEmpty()) { return(Point.Empty); } var array = value.ToString().Split(','); return(new Point(Convert.ToInt32(array[0]), Convert.ToInt32(array[1]))); }
/// <summary> /// 将特殊对象转换为可存储到数据库的类型。 /// </summary> /// <param name="value">要存储的数组。</param> /// <param name="dbType">数据列类型。</param> /// <returns></returns> /// <exception cref="ConverterNotSupportedException">如果不支持将 dbType 类型的数据转换为数组时,引发此异常。</exception> public object ConvertTo(object value, DbType dbType = DbType.String) { if (dbType.IsStringDbType() && value != null) { if (elementType == typeof(byte)) { return(Convert.ToBase64String((byte[])value)); } else { return(BuildString((Array)value)); } } return(value); }
/// <summary> /// 将特殊对象转换为可存储到数据库的类型。 /// </summary> /// <param name="value">要存储的 <see cref="Rectangle"/> 对象。</param> /// <param name="dbType">数据列类型。</param> /// <returns>使用 x,y,w,h 表示 <see cref="Rectangle"/> 对象的字符串。</returns> /// <exception cref="ConverterNotSupportedException">如果不支持将 dbType 类型的数据转换为 <see cref="Rectangle"/> 类型的对象时,引发此异常。</exception> public object ConvertTo(object value, DbType dbType = DbType.String) { if (!dbType.IsStringDbType()) { throw new ConverterNotSupportedException(typeof(Rectangle), dbType); } if (value == null) { return(string.Empty); } var rect = (Rectangle)value; return(string.Join(",", new[] { rect.X, rect.Y, rect.Width, rect.Height })); }
/// <summary> /// 将特殊对象转换为可存储到数据库的类型。 /// </summary> /// <param name="value">要存储的 <see cref="Point"/> 对象。</param> /// <param name="dbType">数据列类型。</param> /// <returns>使用 x,y 表示 <see cref="Point"/> 对象的字符串。</returns> /// <exception cref="ConverterNotSupportedException">如果不支持将 dbType 类型的数据转换为 <see cref="Point"/> 类型的对象时,引发此异常。</exception> public object ConvertTo(object value, DbType dbType = DbType.String) { if (!dbType.IsStringDbType()) { throw new ConverterNotSupportedException(typeof(Point), dbType); } if (value == null) { return(string.Empty); } var point = (Point)value; return(string.Join(",", new[] { point.X, point.Y })); }
/// <summary> /// 将特殊对象转换为可存储到数据库的类型。 /// </summary> /// <param name="value">要存储的 <see cref="Size"/> 对象。</param> /// <param name="dbType">数据列类型。</param> /// <returns>使用 w,h 表示 <see cref="Size"/> 对象的字符串。</returns> /// <exception cref="ConverterNotSupportedException">如果不支持将 dbType 类型的数据转换为 <see cref="Size"/> 类型的对象时,引发此异常。</exception> public object ConvertTo(object value, DbType dbType = DbType.String) { if (!dbType.IsStringDbType()) { throw new ConverterNotSupportedException(typeof(Size), dbType); } if (value == null || !value.Is <Size>()) { return(string.Empty); } var size = (Size)value; return(string.Join(",", new[] { size.Width, size.Height })); }
/// <summary> /// 将存储的数据转换为指定的类型。 /// </summary> /// <param name="value">要转换的值。</param> /// <param name="dbType">数据列类型。</param> /// <returns>一个 <see cref="CodedData"/> 对象。</returns> /// <exception cref="ConverterNotSupportedException">如果不支持将 <see cref="CodedData"/> 类型的对象转换为指定的 dbType 数据时,引发此异常。</exception> public virtual object ConvertFrom(object value, DbType dbType = DbType.String) { if (value == null || value == DBNull.Value) { return(null); } if (dbType == DbType.Binary) { return(DecodeDataFromBytes((byte[])value)); } else if (dbType.IsStringDbType()) { return(DecodeDataFromString(value.ToString())); } return(null); }
/// <summary> /// 将特殊对象转换为可存储到数据库的类型。 /// </summary> /// <param name="value">要存储的 <see cref="Font"/> 对象。</param> /// <param name="dbType">数据列类型。</param> /// <returns>表示 <see cref="Font"/> 对象的字符串。</returns> /// <exception cref="ConverterNotSupportedException">如果不支持将 dbType 类型的数据转换为 <see cref="Font"/> 类型的对象时,引发此异常。</exception> /// <remarks>如宋体12px,粗休删除线,可以表示为 宋体,12px,BU。</remarks> public object ConvertTo(object value, DbType dbType = DbType.String) { if (!dbType.IsStringDbType()) { throw new ConverterNotSupportedException(typeof(Font), dbType); } if (value == null) { return(string.Empty); } var font = value as Font; if (font == null) { return(string.Empty); } var num = 3; if (font.Style != FontStyle.Regular) { num++; } var strArray = new string[num]; var num2 = 0; strArray[num2++] = font.Name; strArray[num2++] = font.Size + GetUnitFlag(font.Unit); if (font.Style != FontStyle.Regular) { strArray[num2] = GetStyleFlag(font.Style); } return(string.Join(",", strArray)); }