2. SqlDataReader转IList
1 /// <summary> 2 /// 判断SqlDataReader是否存在某列 3 /// </summary> 4 /// <param name="dr"> SqlDataReader </param> 5 /// <param name="columnName"> 列名 </param> 6 /// <returns></returns> 7 private bool readerExists(SqlDataReader dr, string columnName) 8 { 9 10 dr.GetSchemaTable().DefaultView.RowFilter = " ColumnName= ‘ " + columnName + " ‘ " ; 11 12 return (dr.GetSchemaTable().DefaultView.Count > 0 ); 13 14 } 15 16 /// <summary> 17 /// 利用反射和泛型将SqlDataReader转换成List模型 18 /// </summary> 19 /// <param name="sql"> 查询sql语句 </param> 20 /// <returns></returns> 21 22 public IList<T> ExecuteToList<T>( string sql) where T : new () 23 24 { 25 IList<T> list; 26 27 Type type = typeof (T); 28 29 string tempName = string .Empty; 30 31 using (SqlDataReader reader = ExecuteReader(sql)) 32 { 33 if (reader.HasRows) 34 { 35 list = new List<T> (); 36 while (reader.Read()) 37 { 38 T t = new T(); 39 40 PropertyInfo[] propertys = t.GetType().GetProperties(); 41 42 foreach (PropertyInfo pi in propertys) 43 { 44 tempName = pi.Name; 45 46 if (readerExists(reader, tempName)) 47 { 48 if (! pi.CanWrite) 49 { 50 continue ; 51 } 52 var value = reader[tempName]; 53 54 if (value != DBNull.Value) 55 { 56 pi.SetValue(t, value, null ); 57 } 58 59 } 60 61 } 62 63 list.Add(t); 64 65 } 66 return list; 67 } 68 } 69 return null ; 70 }
3、结果集从存储过程获取
1 /// <summary> 2 /// 处理存储过程 3 /// </summary> 4 /// <param name="spName"> 存储过程名 </param> 5 /// <param name="parameters"> 参数数组 </param> 6 /// <returns> sql数据流 </returns> 7 protected virtual SqlDataReader ExecuteReaderSP( string spName, ArrayList parameters) 8 { 9 SqlDataReader result = null ; 10 cmd.CommandText = spName; 11 cmd.CommandType = CommandType.StoredProcedure; 12 cmd.Parameters.Clear(); 13 if (parameters != null ) 14 { 15 foreach (SqlParameter param in parameters) 16 { 17 cmd.Parameters.Add(param); 18 } 19 } 20 try 21 { 22 Open(); 23 result = cmd.ExecuteReader(CommandBehavior.CloseConnection); 24 } 25 catch (Exception e) 26 { 27 if (result != null && (! result.IsClosed)) 28 { 29 result.Close(); 30 } 31 LogHelper.WriteLog( " \r\n方法异常【ExecuteReaderSP(string spName, ArrayList parameters)】 " + spName, e); 32 throw new Exception(e.Message); 33 } 34 return result; 35 }
1 <strong> </strong> /// <summary> 2 /// 利用反射将SqlDataReader转换成List模型 3 /// </summary> 4 /// <param name="spName"> 存储过程名称 </param> 5 /// <returns></returns> 6 7 public IList<T> ExecuteQueryListSP<T>( string spName, params SqlParameter[] listParams) where T : new () 8 { 9 IList<T> list; 10 11 Type type = typeof (T); 12 13 string tempName = string .Empty; 14 15 using (SqlDataReader reader = ExecuteReaderSP(spName, new ArrayList(listParams))) 16 { 17 if (reader.HasRows) 18 { 19 list = new List<T> (); 20 while (reader.Read()) 21 { 22 T t = new T(); 23 24 PropertyInfo[] propertys = t.GetType().GetProperties(); 25 26 foreach (PropertyInfo pi in propertys) 27 { 28 tempName = pi.Name; 29 30 // for (int intField = 0; intField < reader.FieldCount; intField++) 31 // { // 遍历该列名是否存在 32 // } 33 34 if (readerExists(reader, tempName)) 35 { 36 if (! pi.CanWrite) 37 { 38 continue ; 39 } 40 var value = reader[tempName]; 41 42 if (value != DBNull.Value) 43 { 44 pi.SetValue(t, value, null ); 45 } 46 47 } 48 49 } 50 51 list.Add(t); 52 53 } 54 return list; 55 } 56 } 57 return null ; 58 }
作者:dasihg
转载:http://blog.csdn.net/dasihg/article/details/8943811
利用反射将Datatable、SqlDataReader转换成List模型
标签:
查看更多关于利用反射将Datatable、SqlDataReader转换成List模型的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did119318