三层架构之数据访问层,利用反射返回IList泛型集合
2010-07-22 22:36
363 查看
才毕业不久,找了份搞C#的工作,因为刚毕业的缘故,还有就是这是我在博客园的第一篇随笔,希望大家拍砖。
今天就把最近学的三层架构里面的东西和反射联系到了一起,虽然反射效率不是很高,但是对于小型项目,用在数据访问层还是可以的,下面就来代码了:
代码
上面的代码是我在一个项目中用到的,不是太难,上面的注释很清楚,在这里就不多说了,主要有2点需要注意,一就是Model层里可能有类似int?的类型,这里需要一个处理propertyType = propertyType.GetGenericArguments()[0];二是Model层不是标准的对应数据库中的字段,所以这里的处理就是抛出异常,但是并不捕获。
好了,三层里面就这点收获,其他的基本上就是大家都熟悉的了,还有就是用到了Developer Express第三方控件,这个很是强大,希望大家可以看看。
今天就把最近学的三层架构里面的东西和反射联系到了一起,虽然反射效率不是很高,但是对于小型项目,用在数据访问层还是可以的,下面就来代码了:
代码
/// <summary> /// 根据指定单据获取此单据对应的账户利息结算记录(结息单的对应利息结算记录) /// </summary> /// <param name="i_PV">结息单据记录对象</param> /// <returns>利息结算记录</returns> public static IList<T> GetAccountBalance<T>(Investment_PrincipalVouch i_PV) { SqlParameter[] paras = new SqlParameter[2]; paras[0] = new SqlParameter("@VouchDate", DAHelper.ReadParam(i_PV.VouchDate)); paras[1] = new SqlParameter("@AccountID", DAHelper.ReadParam(i_PV.OutAccountID)); string strQuery = "SELECT * FROM dbo.KD_T_AccountBalance WHERE AccountID=@AccountID AND BalanceDate=@VouchDate"; SqlDataReader reader = DAHelper.ExecuteReader(strQuery, CommandType.Text, paras); IList<T> list = new List<T>(); Type type = typeof(T); PropertyInfo[] properties = type.GetProperties(); while (reader.Read()) //读取传入的数据 { T t = Activator.CreateInstance<T>(); //构造泛型实例 foreach (PropertyInfo propertity in properties) //遍历属性集合 { try { object obj = reader[propertity.Name]; //从reader中获取列名等于属性名的值 if (obj.Equals(DBNull.Value)) //为空则设置属性为null { propertity.SetValue(t, null, null); } else //不为空 { Type propertyType = propertity.PropertyType; //获取属性的类型 if (propertyType.IsGenericType) //如果此属性是泛型(这里判断原因是防止有类似int?的类型) { propertyType = propertyType.GetGenericArguments()[0]; } propertity.SetValue(t, Convert.ChangeType(obj, propertyType), null); //设置属性值 } } catch (Exception ex) //抛出异常的原因是Model里的字段在数据库不存在,所以此异常不用捕获,直接跳过 { } } list.Add(t); //将泛型对象加入到列表中去 } return list; }
上面的代码是我在一个项目中用到的,不是太难,上面的注释很清楚,在这里就不多说了,主要有2点需要注意,一就是Model层里可能有类似int?的类型,这里需要一个处理propertyType = propertyType.GetGenericArguments()[0];二是Model层不是标准的对应数据库中的字段,所以这里的处理就是抛出异常,但是并不捕获。
好了,三层里面就这点收获,其他的基本上就是大家都熟悉的了,还有就是用到了Developer Express第三方控件,这个很是强大,希望大家可以看看。
相关文章推荐
- 利用反射实现mysql数据库sql查询 返回List<E>泛型(持久化)对象
- C#读取数据库返回泛型集合(DataSetToList)
- List转DataTable(反射) ; 将泛型集合类转换成DataTable ; 将集合类转换成DataTable
- C#读取数据库返回泛型集合 把DataSet类型转换为List<T>泛型集合
- 三层架构中使用实体类填充泛型集合代替DataTable解决方案(ASP.NET+C#)
- 三层架构中使用实体类填充泛型集合代替DataTable解决方案(ASP.NET+C#)
- [转]通过反射填充泛型集合List的静态方法
- 利用泛型和反射,将从数据库select出来的集合直接转换成对象
- 利用泛型和反射对Java对象集合转换成Json的工具类
- 利用反射越过集合的泛型检查
- [转]通过反射填充泛型集合List的静态方法
- C#读取数据库返回泛型集合(DataSetToList)
- 利用Jquery让返回的各类数据(string、集合(List<>)、类)以Json数据格式返回,为什么要用到result.d (JQuery ajax 返回数据 使用 .d 的问题)
- 三层架构中使用实体类填充泛型集合代替DataTable解决方案(ASP.NET+C#)
- 将泛型集合类(List<T>)转换成DataTable,返回的DataTable所有列的数据类型为string型,且列顺序与字符串提供的字段顺序一致
- C#读取数据库返回泛型集合 把DataSet类型转换为List<T>泛型集合
- 01-java基础加强,eclipse工具使用,快捷键,断点调试,单元测试,jdk5新特性,增强for循环,集合map,list,可变参数,枚举,反射,泛型
- 利用反射把数据集合转换成List
- 对比两个同类型的泛型集合并返回差异泛型集合 ——两个List<类名>的比较
- c#利用链表模拟实现泛型集合List﹤T﹥