/// 创建sql参数 /// <summary> /// 创建sql参数 /// </summary> /// <param name="attr"></param> /// <returns></returns> private static SqlParameter CreateSqlParameter(DBFieldAttribute attr) { if (attr.DBLength == 0) { return(new SqlParameter("@" + attr.DBField, attr.DBType) { Value = attr.Value }); } else { return(new SqlParameter("@" + attr.DBField, attr.DBType, attr.DBLength) { Value = attr.Value }); } }
/// 获取所有的字段属性 /// <summary> /// 获取所有的字段属性 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="info"></param> /// <returns></returns> public static Dictionary <string, DBFieldAttribute> GetDBFieldAttributes <T>(T info) { Dictionary <string, DBFieldAttribute> list = new Dictionary <string, DBFieldAttribute>(); foreach (PropertyInfo proInfo in info.GetType().GetProperties()) { object[] attrs = proInfo.GetCustomAttributes(typeof(DBFieldAttribute), true); if (attrs.Length == 1) { DBFieldAttribute attr = (DBFieldAttribute)attrs[0]; if (attr != null) { attr.Value = proInfo.GetValue(info, null); attr.ProInfo = proInfo; list.Add(attr.DBField, attr); } } } return(list); }
/// 设置属性的值 /// <summary> /// 设置属性的值 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="info"></param> /// <param name="dr"></param> public static void SetValues <T>(T info, DataRow dr) { foreach (PropertyInfo proInfo in info.GetType().GetProperties()) { object[] attrs = proInfo.GetCustomAttributes(typeof(DBFieldAttribute), true); if (attrs.Length == 1) { DBFieldAttribute attr = (DBFieldAttribute)attrs[0]; if (attr != null) { switch (attr.DBType) { case SqlDbType.SmallInt: case SqlDbType.TinyInt: case SqlDbType.Bit: case SqlDbType.Int: { int?value = (!dr.Table.Columns.Contains(attr.DBField) || dr[attr.DBField] == null || dr[attr.DBField] == DBNull.Value) ? null : (int?)Convert.ToInt32(dr[attr.DBField]); proInfo.SetValue(info, value, null); } break; case SqlDbType.Float: case SqlDbType.Real: { double?value = (!dr.Table.Columns.Contains(attr.DBField) || dr[attr.DBField] == null || dr[attr.DBField] == DBNull.Value) ? null : (double?)Convert.ToDouble(dr[attr.DBField]); proInfo.SetValue(info, value, null); } break; case SqlDbType.Money: case SqlDbType.SmallMoney: case SqlDbType.Decimal: { decimal?value = (!dr.Table.Columns.Contains(attr.DBField) || dr[attr.DBField] == null || dr[attr.DBField] == DBNull.Value) ? null : (decimal?)Convert.ToDecimal(dr[attr.DBField]); proInfo.SetValue(info, value, null); } break; case SqlDbType.BigInt: case SqlDbType.Timestamp: { long?value = (!dr.Table.Columns.Contains(attr.DBField) || dr[attr.DBField] == null || dr[attr.DBField] == DBNull.Value) ? null : (long?)Convert.ToInt64(dr[attr.DBField]); proInfo.SetValue(info, value, null); } break; case SqlDbType.Xml: case SqlDbType.Char: case SqlDbType.NChar: case SqlDbType.NVarChar: case SqlDbType.VarChar: case SqlDbType.NText: case SqlDbType.Text: { string value = (!dr.Table.Columns.Contains(attr.DBField) || dr[attr.DBField] == null || dr[attr.DBField] == DBNull.Value) ? null : Convert.ToString(dr[attr.DBField]); proInfo.SetValue(info, value, null); } break; case SqlDbType.UniqueIdentifier: { Guid?value = (!dr.Table.Columns.Contains(attr.DBField) || dr[attr.DBField] == null || dr[attr.DBField] == DBNull.Value) ? null : (Guid?)new Guid(dr[attr.DBField].ToString()); proInfo.SetValue(info, value, null); } break; case SqlDbType.DateTime: case SqlDbType.SmallDateTime: case SqlDbType.Date: case SqlDbType.Time: case SqlDbType.DateTime2: { DateTime?value = (!dr.Table.Columns.Contains(attr.DBField) || dr[attr.DBField] == null || dr[attr.DBField] == DBNull.Value) ? null : (DateTime?)Convert.ToDateTime(dr[attr.DBField]); proInfo.SetValue(info, value, null); } break; case SqlDbType.Binary: case SqlDbType.Image: case SqlDbType.VarBinary: case SqlDbType.Variant: case SqlDbType.Udt: case SqlDbType.Structured: case SqlDbType.DateTimeOffset: { object value = (!dr.Table.Columns.Contains(attr.DBField) || dr[attr.DBField] == null || dr[attr.DBField] == DBNull.Value) ? null : dr[attr.DBField]; proInfo.SetValue(info, value, null); } break; } } } } }