DALGeneric.cs
上传用户:lishan0805
上传日期:2019-12-08
资源大小:12048k
文件大小:4k
源码类别:

OA系统

开发平台:

C#

  1. // =================================================================== 
  2. // 产品(COM.OA.SqlServerDAL)项目
  3. //====================================================================
  4. // wangyp @Copy Right 2006-2008
  5. // 文件:DALGeneric.cs
  6. // 项目名称:工程项目管理 
  7. // 创建时间:2008-9-23
  8. // 负责人:wangyp
  9. // 引用System.Configuration程序集
  10. // 在 web.config 文件
  11. /*
  12. <appSettings>
  13. <add key="Entity" value="COM.OA.Entity"/>
  14. </appSettings>
  15. */
  16. // ===================================================================
  17. using System;
  18. using System.Collections;
  19. using System.Collections.Generic;
  20. using System.Data;
  21. using System.Data.SqlClient;
  22. using System.Text;
  23. using System.Reflection;
  24. using COM.OA.IDAL;
  25. namespace COM.OA.SqlServerDAL
  26. {
  27.     /// <summary>
  28.     /// 数据访问层泛型集合对象操作
  29.     /// </summary>
  30.     public class DALGeneric : IDALGeneric
  31.     {
  32.         #region 变量
  33.         private static readonly string _path = System.Configuration.ConfigurationManager.AppSettings["Entity"];
  34.         #endregion
  35.         #region 构造函数
  36.         public DALGeneric()
  37.         { }
  38.         #endregion
  39.         #region -----------实例化接口函数----------
  40.         #region 实体对象
  41.         /// <summary>
  42.         /// 得到泛型实体对象
  43.         /// </summary>
  44.         /// <typeparam name="T">泛型</typeparam>
  45.         /// <param name="dr">dr</param>
  46.         /// <returns>返回指定类型的实体对象</returns>
  47.         public T Select<T>(IDataReader dr)
  48.         {
  49.             Type type = typeof(T);
  50.             string typeName = DALGeneric._path + "." + type.Name;
  51.             T obj = (T)Assembly.Load(DALGeneric._path).CreateInstance(typeName);
  52.             //T obj = (T)Activator.CreateInstance(type);
  53.             PropertyInfo[] propertyInfos = type.GetProperties();
  54.             for (int i = 0; i < dr.FieldCount; i++)
  55.             {
  56.                 for (int j = 0; j < propertyInfos.Length; j++)
  57.                 {
  58.                     PropertyInfo propertyInfo = propertyInfos[j];
  59.                     if (dr.GetName(i).Trim().ToLower() == propertyInfo.Name.Trim().ToLower())
  60.                     {
  61.                         Type propertyType = propertyInfo.PropertyType;
  62.                         if (propertyType.IsValueType || (propertyType.IsClass && propertyType.IsSerializable && propertyType.IsSealed))
  63.                         {
  64.                             object val = dr[propertyInfo.Name];
  65.                             if (val != DBNull.Value)
  66.                             {
  67.                                 propertyInfo.SetValue(obj, val, null);// => obj.propertyInfo = val;
  68.                             }
  69.                             break;
  70.                         }
  71.                     }
  72.                 }
  73.             }
  74.             return obj;
  75.         }
  76.         #endregion
  77.         #region 方法
  78.         /// <summary>
  79.         /// 得到表满足查询条件记录
  80.         /// </summary>
  81.         /// <typeparam name="T">泛型</typeparam>
  82.         /// <param name="commandType">命令类型</param>
  83.         /// <param name="sqlCommand">命令</param>
  84.         /// <param name="param">命令参数数组</param>
  85.         /// <returns>结果集</returns>
  86.         public IList<T> Select<T>(CommandType commandType, string sqlCommand, params SqlParameter[] param)
  87.         {
  88.             IList<T> list = new List<T>();
  89.             using (SqlDataReader dr = SqlHelper.ExecuteReader(Conn.SqlConn, commandType, sqlCommand, param))
  90.             {
  91.                 while (dr.Read())
  92.                 {
  93.                     list.Add(this.Select<T>(dr));
  94.                 }
  95.             }
  96.             return list;
  97.         }
  98.         /// <summary>
  99.         /// 执行数据库操作
  100.         /// </summary>
  101.         /// <param name="commandType">命令类型</param>
  102.         /// <param name="sqlCommand">命令</param>
  103.         /// <param name="param">命令参数数组</param>
  104.         /// <returns>受影响的行数</returns>
  105.         public int Execute(CommandType commandType, string sqlCommand, params SqlParameter[] param)
  106.         {
  107.             int result = 0;
  108.             result = SqlHelper.ExecuteNonQuery(Conn.SqlConn, commandType, sqlCommand, param);
  109.             return result;
  110.         }
  111.         #endregion
  112.         #endregion
  113.     }
  114. }