/// <summary> /// 对新增和修改的检测 /// 1、是否可为空 /// 2、字符长度 /// 3、数字范围 /// </summary> /// <param name="datamoudle"></param> /// <param name="f"></param> /// <param name="v"></param> /// <param name="errs"></param> private void CheckAddOrUpdateFieldValue( IDataModel datamoudle, IDataFieldModel f, object v, IList <DataModalFieldException> errs) { if (!DataValueParase.PassNullValue(f, v)) { errs.Add(ErrorCreateHelper.CreateFieldIsNullError(f.Name, f.Title)); return; } if (f.FieldDbType == System.Data.DbType.String) { //字符是否超出最大长度 int mx = f.GetFieldSize(); //等于int.maxvalue则不限制字符大小 if (mx != int.MaxValue) { mx = mx * 2; //字符类型在数据库存储均使用nvarchar类型(Unicode:每个字符占两字节) string vv = (string)v; if (!string.IsNullOrEmpty(vv)) { int sl = System.Text.Encoding.Unicode.GetByteCount(vv); if (sl > mx) { errs.Add(ErrorCreateHelper.CreateFieldValueOutOfRangeError(f.Name, f.Title, mx)); return; } } } } else { //数字是否超出范围 Type fieldType = f.GetClrType(); //数字是否超出范围 NumberType nt = DataValueParase.IsNumberType(fieldType); if ((nt != NumberType.Unkown) || (fieldType == typeof(DateTime) || fieldType == typeof(TimeSpan))) { string exp = f.GetMinMaxExpress(); if (!string.IsNullOrWhiteSpace(exp) && !DataValueParase.IsDbNullValue(v)) { if (!MinMaxValueHelper.ValueIsInRangle(exp, v)) { errs.Add(ErrorCreateHelper.CreateFieldValueOutOfRangeError(f.Name, f.Title, exp)); return; } } } } }
/// <summary> /// 将字段值从数据库格式转换为本机格式 /// </summary> /// <param name="field">字段信息</param> /// <param name="value">字段值</param> /// <returns></returns> public static object ConvertFieldValueFromDbValue(IDataFieldModel field, object value) { if (field != null) { var c = field.GetDbValueConvertor(); if (c != null) { return(c.ParseValueFromDbValue(value, field.GetClrType())); } else { if (value != null && value is IDbValueConvertor) { return(((IDbValueConvertor)value).ParseValueFromDbValue(value, value.GetType())); } } } return(value); }
/// <summary> /// 字段值转换为数据库格式 /// </summary> /// <param name="field">字段信息</param> /// <param name="value">字段值</param> /// <returns></returns> public static object ConvertFieldValueToDbValue(IDataFieldModel field, object value) { if (field != null) { var c = field.GetDbValueConvertor(); if (c != null) { return(c.FormateValueToDbValue(value)); } else { Type clr = field.GetClrType(); if (clr.FindInterface(typeof(IDbValueConvertor))) { IDbValueConvertor xx = clr.CreateObject() as IDbValueConvertor; return(xx.FormateValueToDbValue(value)); } } } return(value); }
/// <summary> /// 添加参数到paramets中去 /// </summary> /// <param name="paramets">参数集合,返回的参数将添加到该集合中,如果不为空的话</param> /// <param name="ft">参数后缀,可为为null</param> /// <param name="field">字段信息</param> /// <param name="value">行值</param> /// <returns></returns> private static DataParamet AppendParamet(List <IDataParamet> paramets, string parhz, IDataFieldModel field, object rowvalue) { object value = field.GetModelFieldValue(rowvalue); value = ConvertFieldValueToDbValue(field, value); DataParamet p = new DataParamet() { Name = GenerateParametName(field.Name, parhz), Value = value, ValueType = field.GetClrType() }; int s = field.GetFieldSize(); if (s > 0) { p.ValueSize = s; } if (paramets != null) { paramets.Add(p); } return(p); }
private static bool IsNullableFieldForBooleanOrNum(IDataFieldModel f) { if (f == null) { return(false); } return(f.CanbeNull() && (f.FieldDbType == System.Data.DbType.Boolean || DataValueParase.IsNumberType(f.GetClrType()) != NumberType.Unkown)); }