ASP.NET 相关
关于SqlDataReader 不需要重复字段输入,类的成员字段过多编写起来麻烦 ,一个方法 搞定 ,见下:
上图 : 查询过多数据的话这个方式比较节省性能
1.问题来了: 如果字段很多怎么办?? 如何自动遍历所有子成员?见下代码
只需要给 sqldatareader给此方法就行 下边图我的 :类名为user 只需要给类名个sqldatareader执行的结果就可以自动遍历:
使用这个泛型方法处理 直接 实现效果哟 DataReaderToList<t> 方法见下
代码见下边:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 /// <summary> 2 /// 工具类 SqlDataReader 查询方便返回 3 /// </summary> 4 /// <typeparam name="T"></typeparam> 5 /// <param name="SDR"></param> 6 /// <returns></returns> 7 private static List<T> DataReaderToList<T>(SqlDataReader SDR) where T : class 8 { 9 List<T> ListData = new List<T>(); 10 11 if (SDR.HasRows) 12 { 13 ListData.Clear(); 14 while (SDR.Read()) 15 { 16 object Obj = System.Activator.CreateInstance(typeof(T)); 17 Type ObjType = Obj.GetType(); 18 #region 一行数据赋值给一个对象 19 for (int i = 0; i < SDR.FieldCount; i++) 20 { 21 PropertyInfo PI = ObjType.GetProperty(SDR.GetName(i)); 22 if (PI != null) 23 { 24 string PTName = PI.PropertyType.Name.ToString(); 25 string FullName = PI.PropertyType.FullName; 26 string Name = PI.Name; 27 28 object Value = PI.GetValue(Obj, null); 29 30 switch (PI.PropertyType.ToString()) 31 { 32 case "System.Int64": 33 PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToInt64(SDR[Name]), null); 34 break; 35 case "System.Byte[]": 36 PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : (byte[])SDR[Name], null); 37 break; 38 case "System.Boolean": 39 PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToBoolean(SDR[Name]), null); 40 break; 41 case "System.String": 42 PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToString(SDR[Name]), null); 43 break; 44 case "System.DateTime": 45 PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToDateTime(SDR[Name]), null); 46 break; 47 case "System.Decimal": 48 PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToDecimal(SDR[Name]), null); 49 break; 50 case "System.Double": 51 PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToDouble(SDR[Name]), null); 52 break; 53 case "System.Int32": 54 PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToInt32(SDR[Name]), null); 55 break; 56 case "System.Single": 57 PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToSingle(SDR[Name]), null); 58 break; 59 case "System.Byte": 60 PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToByte(SDR[Name]), null); 61 break; 62 default: 63 int Chindex = PTName.IndexOf("Nullable"); 64 if (FullName.IndexOf("System.Int64") >= 0) 65 { 66 PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToInt64(SDR[Name]), null); 67 } 68 69 if (FullName.IndexOf("System.Boolean") >= 0) 70 { 71 PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToBoolean(SDR[Name]), null); 72 } 73 74 if (FullName.IndexOf("System.String") >= 0) 75 { 76 PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToString(SDR[Name]), null); 77 } 78 79 if (FullName.IndexOf("System.DateTime") >= 0) 80 { 81 PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToDateTime(SDR[Name]), null); 82 } 83 84 if (FullName.IndexOf("System.Decimal") >= 0) 85 { 86 PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToDecimal(SDR[Name]), null); 87 } 88 89 if (FullName.IndexOf("System.Double") >= 0) 90 { 91 PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToDouble(SDR[Name]), null); 92 } 93 94 if (FullName.IndexOf("System.Int32") >= 0) 95 { 96 PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToInt32(SDR[Name]), null); 97 } 98 99 if (FullName.IndexOf("System.Single") >= 0) 100 { 101 PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToSingle(SDR[Name]), null); 102 } 103 104 if (FullName.IndexOf("System.Byte") >= 0) 105 { 106 PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToByte(SDR[Name]), null); 107 } 108 109 if (FullName.IndexOf("System.Int16") >= 0) 110 { 111 PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToInt16(SDR[Name]), null); 112 } 113 114 if (FullName.IndexOf("System.UInt16") >= 0) 115 { 116 PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToUInt16(SDR[Name]), null); 117 } 118 119 if (FullName.IndexOf("System.UInt32") >= 0) 120 { 121 PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToUInt32(SDR[Name]), null); 122 } 123 124 if (FullName.IndexOf("System.UInt64") >= 0) 125 { 126 PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToUInt64(SDR[Name]), null); 127 } 128 129 if (FullName.IndexOf("System.SByte") >= 0) 130 { 131 PI.SetValue(Obj, SDR.IsDBNull(SDR.GetOrdinal(Name)) ? Value : Convert.ToSByte(SDR[Name]), null); 132 } 133 break; 134 } 135 136 } 137 } 138 #endregion 139 ListData.Add(Obj as T); 140 } 141 } 142 if (!SDR.IsClosed) 143 SDR.Close(); 144 145 return ListData; 146 }