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