SQLDataReaderToList 数据读取器转换到List
来源:互联网 发布:数据库用来做什么 编辑:程序博客网 时间:2024/05/22 00:34
现在开发项目都用到3层架构,bll dal model 大量使用list来返回列表数据,
每次都需要手动写一堆代码把每行数据写到List中。
public class UserInfo{ public string Age { get; set; } public string Sex { get; set; }}
```List<UserInfo> UserInfoList= new List<UserInfo>while(reader.Read()){ UserInfo userinfo = new UserInfo(); userinfo.Age = reader["Age"].ToString(); userinfo.Sex= reader["Sex"].ToString(); UserInfoList.add(userinfo);}GridView1.DataSource = UserInfoList;GridView1.DataBind()
这样写字段太多的话工作量太大了,有没有一种自动转到列的方法呢代码可以也样写的
protected List<T> DataReaderToList<T>(SqlDataReader SDR) where T : class { List<T> ListData = new List<T>(); if (SDR.HasRows) { ListData.Clear(); while (SDR.Read()) { object Obj = System.Activator.CreateInstance(typeof(T)); Type ObjType = Obj.GetType(); #region 一行数据赋值给一个对象 for (int i = 0; i < SDR.FieldCount; i++) { PropertyInfo PI = ObjType.GetProperty(SDR.GetName(i)); if (PI != null) { string PTName = PI.PropertyType.Name.ToString(); string FullName = PI.PropertyType.FullName; string Name = PI.Name; object Value = PI.GetValue(Obj, null); switch (PI.PropertyType.ToString()) { case "System.Int64": PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToInt64(SDR[Name]), null); break; case "System.Byte[]": PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : (byte[])SDR[Name], null); break; case "System.Boolean": PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToBoolean(SDR[Name]), null); break; case "System.String": PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToString(SDR[Name]), null); break; case "System.DateTime": PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToDateTime(SDR[Name]), null); break; case "System.Decimal": PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToDecimal(SDR[Name]), null); break; case "System.Double": PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToDouble(SDR[Name]), null); break; case "System.Int32": PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToInt32(SDR[Name]), null); break; case "System.Single": PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToSingle(SDR[Name]), null); break; case "System.Byte": PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToByte(SDR[Name]), null); break; default: int Chindex = PTName.IndexOf("Nullable"); if (FullName.IndexOf("System.Int64") >= 0) { PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToInt64(SDR[Name]), null); } if (FullName.IndexOf("System.Boolean") >= 0) { PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToBoolean(SDR[Name]), null); } if (FullName.IndexOf("System.String") >= 0) { PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToString(SDR[Name]), null); } if (FullName.IndexOf("System.DateTime") >= 0) { PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToDateTime(SDR[Name]), null); } if (FullName.IndexOf("System.Decimal") >= 0) { PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToDecimal(SDR[Name]), null); } if (FullName.IndexOf("System.Double") >= 0) { PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToDouble(SDR[Name]), null); } if (FullName.IndexOf("System.Int32") >= 0) { PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToInt32(SDR[Name]), null); } if (FullName.IndexOf("System.Single") >= 0) { PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToSingle(SDR[Name]), null); } if (FullName.IndexOf("System.Byte") >= 0) { PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToByte(SDR[Name]), null); } if (FullName.IndexOf("System.Int16") >= 0) { PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToInt16(SDR[Name]), null); } if (FullName.IndexOf("System.UInt16") >= 0) { PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToUInt16(SDR[Name]), null); } if (FullName.IndexOf("System.UInt32") >= 0) { PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToUInt32(SDR[Name]), null); } if (FullName.IndexOf("System.UInt64") >= 0) { PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToUInt64(SDR[Name]), null); } if (FullName.IndexOf("System.SByte") >= 0) { PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToSByte(SDR[Name]), null); } break; } } } #endregion ListData.Add(Obj as T); } } if (!SDR.IsClosed) SDR.Close(); return ListData; }
var UserInfoList = DataReaderToList(reader);
GridView1.DataSource = UserInfoList;
GridView1.DataBind();
“`
一句话就搞定了。
0 0
- SQLDataReaderToList 数据读取器转换到List
- 数据读取器揭密
- C# 使用数据读取器
- 数据读取器揭密
- Extjs学习 数据读取器DataReader
- wpf 异步导出 DataGrid 数据到 excel(包括转换 List 到 DataTable)
- C#数据库入门-012:数据读取器
- Extjs常用Reader(数据读取器)详解
- 数据读取器和DataGridView控件的使用
- Json数据转换list对象
- Json数据转换list对象
- OGNL实现List数据转换
- list转换成树形数据
- Dictionary到List转换中的性能问题
- java String list转换到array
- Ext中数据读取器Ext.data.DataReader的学习
- [原创]SSIS-WMI 数据读取器任务:监控物理磁盘空间
- ADO.NET之8-数据读取器,DataReader---ShinePans
- QMdiArea多个子窗口tabView模式去下划线
- 服务器文件加密 恢复代理
- AWT-剪切板
- 中国一号信令安装配置教程
- 2016的总结吧,2017的展望
- SQLDataReaderToList 数据读取器转换到List
- python分析作业提交情况
- Day_3.(2)
- PHP拦截器
- 使用SVN过程中遇到的奇葩问题
- opencv学习(二十六)之图像金字塔(高斯金字塔、拉普拉斯金字塔)
- 电脑bluescreen蓝屏解决方法
- PHP - Curl的302是什么鬼
- python--函数