(更新时间)2021年5月19日 仓库温控系统(Winform) 06 DataRow/DataTable/SqlDataReader和实体类相互转换DbConvert

编程入门 行业动态 更新时间:2024-10-06 14:26:59

(<a href=https://www.elefans.com/category/jswz/34/1764326.html style=更新时间)2021年5月19日 仓库温控系统(Winform) 06 DataRow/DataTable/SqlDataReader和实体类相互转换DbConvert"/>

(更新时间)2021年5月19日 仓库温控系统(Winform) 06 DataRow/DataTable/SqlDataReader和实体类相互转换DbConvert

/// <summary>
/// 类型转换处理---DataRow/DataTable/SqlDataReader    T/List<T>
/// </summary>
public class DbConvert
{/// <summary>/// 将DataRow转换成实体/// </summary>/// <typeparam name="T"></typeparam>/// <param name="dr"></param>/// <returns></returns>private static T DataRowToModel<T>(DataRow dr, string cols){//创建实例对象T model = Activator.CreateInstance<T>();Type type = typeof(T);if (dr != null){//获取指定列名的属性数组var properties = PropertyHelper.GetTypeProperties<T>(cols);//将第列的值赋值给对应的属性foreach (var p in properties){string colName = p.GetColName();if (dr[colName] is DBNull)p.SetValue(model, null);//为属性设置值 else{SetPropertyValue<T>(model, dr[colName], p);}}return model;}elsereturn default(T);}/// <summary>/// 将DataTable转换成List<T>/// </summary>/// <typeparam name="T"></typeparam>/// <param name="dt"></param>/// <returns></returns>public static List<T> DataTableToList<T>(DataTable dt, string cols){List<T> list = new List<T>();if (dt.Rows.Count > 0){foreach (DataRow dr in dt.Rows){//将每行转换为一个对象T model = DataRowToModel<T>(dr, cols);list.Add(model);}}return list;}/// <summary>/// 将SqlDataReader对象转换成实体(返回一条数据)/// </summary>/// <typeparam name="T"></typeparam>/// <param name="reader"></param>/// <returns></returns>public static T SqlDataReaderToModel<T>(SqlDataReader reader, string cols){//创建指定类型的实例T model = Activator.CreateInstance<T>();Type type = typeof(T);//获取指定列名的属性数组var properties = PropertyHelper.GetTypeProperties<T>(cols);if (reader.Read()){//将指定列的值赋值给对应的属性foreach (var p in properties){string colName = p.GetColName();if (reader[colName] is DBNull){p.SetValue(model, null);}else{SetPropertyValue<T>(model, reader[colName], p);}}return model;}else return default(T);}/// <summary>/// 将SqlDataReader转换成List/// </summary>/// <typeparam name="T"></typeparam>/// <param name="reader"></param>/// <returns></returns>public static List<T> SqlDataReaderToList<T>(SqlDataReader reader, string cols){List<T> list = new List<T>();Type type = typeof(T);var properties = PropertyHelper.GetTypeProperties<T>(cols);while (reader.Read()){T model = Activator.CreateInstance<T>();foreach (var p in properties){string colName = p.GetColName();if (reader[colName] is DBNull){p.SetValue(model, null);}else{SetPropertyValue<T>(model, reader[colName], p);}}list.Add(model);}return list;}//设置属性值    属性的数据类型Nullable<int>   int?private static void SetPropertyValue<T>(T model, object obj, PropertyInfo property){//数据类型是泛型类型&&泛型类型定义如果是Nullable<>  if (property.PropertyType.IsGenericType &&property.PropertyType.GetGenericTypeDefinition().Equals(typeof(Nullable<>))){property.SetValue(model, Convert.ChangeType(obj, Nullable.GetUnderlyingType(property.PropertyType)));}else{property.SetValue(model, Convert.ChangeType(obj, property.PropertyType));}}}

更多推荐

(更新时间)2021年5月19日 仓库温控系统(Winform) 06 DataRow/DataTable/SqlDataReader和实体类相互转换DbCon

本文发布于:2024-02-14 16:04:53,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1764172.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:更新时间   仓库   系统   实体类   Winform

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!