where T : Class 使用 项目中的部分代码

时间有限,先上代码,等有时间再来完善

 1、  AbstractDAO<T>:DAO where T : BaseEntity

 2、  IAcountDAO : AbstractDAO<IAcount>

   


==================================

[Serializable]            
public class BaseEntity   
{                         
                          
}                         


====================================

public class DAO
    {
    }


=====

public abstract class AbstractDAO<T>:DAO where T : BaseEntity
    {
        /// <summary>
        /// 主键名
        /// </summary>
        protected abstract string PrimaryKeyName
        {
            get;
        }


        protected abstract string TableName
        {
            get;
        }


        /// <summary>
        /// 填充实体类
        /// </summary>
        /// <param name="dt"></param>
        /// <returns></returns>
        protected abstract T FillEntity(DataRow dr);


        public abstract void Insert(T entity);


        public abstract void Update(T entity);


        /// <summary>
        /// 为实体所有属性打包成参数
        /// </summary>
        /// <param name="EntityObj">实体对象</param>
        /// <returns>参数列表</returns>
        protected abstract SqlParameter[] GetAllParameters(T EntityObj);




        /// <summary>
        /// 基本的查询语句
        /// </summary>
        protected string SelectStatement
        {
            get { return "select * from " + TableName + " "; }
        }




        /// <summary>
        /// 为实体Key打包成参数
        /// </summary>
        /// <param name="keyValue">PrimaryKey的值</param>
        /// <returns>参数列表</returns>
        protected SqlParameter[] GetPrimaryKeyParameter(int keyValue)
        {
            SqlParameter[] parameters = new SqlParameter[]
            {
                com.iccpp.DataBaseSevice.DataBase.MakeInParam(PrimaryKeyName,SqlDbType.BigInt,8,keyValue)
            };
            return parameters;
        }
        /// <summary>
        /// 执行SQL语句返回实体
        /// </summary>
        /// <param name="sql">sql语句</param>
        /// <returns></returns>
        public T ExecuteReturnEntity(string sql)
        {
            DataTable dt = DataBase.GetDataTable(sql);
            if (dt != null && dt.Rows.Count != 0)
            {
                return FillEntity(dt.Rows[0]);
            }
            return null;
        }

}



public class IAcountDAO : AbstractDAO<IAcount>
    {


        #region 属性
        protected override string PrimaryKeyName
        {
            get { return "Acc_ID"; }
        }
        protected override string TableName
        {
            get { return "IAcount"; }
        }
        #endregion


        public bool IsExistByAccount(string Account)
        {
            string sql = SelectStatement + "where Acc_Account=@Acc_Account";
            SqlParameter[] param =
            {
                DataBase.MakeInParam("@Acc_Account",SqlDbType.NVarChar,20,Account)
            };
            return DataBase.IsExist(sql, param);
        }

        public override void Update(IAcount iAcount)
        {
            if (iAcount == null)
                throw new NotNullException();
            StringBuilder sql = new StringBuilder();
            
            SqlParameter[] parameters = GetAllParameters(iAcount);
            ExecuteSql(sql.ToString(), parameters);
        }


protected override IAcount FillEntity(DataRow dr)
        {
            Acount Iacount = new Acount();
            Iacount.Acc_ID = long.Parse(dr["Acc_ID"].ToString());
            Iacount.Acc_Key = Convert.ToString(dr["Acc_Key"]);
            Iacount.Acc_Account = Convert.ToString(dr["Acc_Account"]);
            
            return Iacount;
        }


public EntityCollection<IAcount> SelectAcountByComID(int ComID)
        {
            string sql = SelectStatement + "where Com_ID=" + ComID;
            return ExecuteReturnCollection(sql);
        }



=====

    public abstract class EntityDAO<T> where T : BaseEntity
    {
        /// <summary>
        /// 主键名
        /// </summary>
        protected abstract string PrimaryKeyName
        {
            get;
        }
        protected abstract string TableName
        {
            get;
        }
        //新增SQL语句
        public abstract string InsertSql
        {
            get;
        }
        //修改SQL语句
        public abstract string UpdateSql
        {
            get;
        }






        /// <summary>
        /// 填充实体类
        /// </summary>
        /// <param name="dt"></param>
        /// <returns></returns>
        protected abstract T FillEntity(DataRow dr);




        /// <summary>
        /// 为实体所有属性打包成参数
        /// </summary>
        /// <param name="EntityObj">实体对象</param>
        /// <returns>参数列表</returns>
        public abstract SqlParameter[] GetAllParameters(T EntityObj);




        /// <summary>
        /// 基本的查询语句
        /// </summary>
        protected string SelectStatement
        {
            get { return "select * from " + TableName + " "; }
        }


        public void Insert(T entity)
        {
            CheckEntityFillData(entity);
            ExecuteSql(InsertSql, GetAllParameters(entity));
        }


        public void Update(T entity)
        {
            ExecuteSql(UpdateSql, GetAllParameters(entity));
        }
        /// <summary>
        /// 为实体Key打包成参数
        /// </summary>
        /// <param name="keyValue">PrimaryKey的值</param>
        /// <returns>参数列表</returns>
        protected SqlParameter[] GetPrimaryKeyParameter(int keyValue)
        {
            SqlParameter[] parameters = new SqlParameter[]
            {
                com.iccpp.DataBaseSevice.DataBase.MakeInParam(PrimaryKeyName,SqlDbType.BigInt,8,keyValue)
            };
            return parameters;
        }
        /// <summary>
        /// 执行SQL语句返回实体
        /// </summary>
        /// <param name="sql">sql语句</param>
        /// <returns></returns>
        public T ExecuteReturnEntity(string sql)
        {
            DataTable dt = DataBase.GetDataTable(sql);
            if (dt != null && dt.Rows.Count != 0)
            {
                return FillEntity(dt.Rows[0]);
            }
            return null;
        }
        /// <summary>
        /// 执行带参数SQL语句返回实体
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <param name="param">参数集</param>
        /// <returns></returns>
        protected T ExecuteParamReturnEntity(string sql, SqlParameter[] param)
        {
            DataTable dt = DataBase.GetDataTable(sql, param);
            if (dt != null && dt.Rows.Count != 0)
            {
                return FillEntity(dt.Rows[0]);
            }


            return null;
        }
        /// <summary>
        /// 执行SQL语句返回实体集合
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <returns>实体集合</returns>
        protected EntityCollection<T> ExecuteReturnCollection(string sql)
        {
            DataTable dt = DataBase.GetDataTable(sql);
            EntityCollection<T> ec = new EntityCollection<T>();
            if (dt != null && dt.Rows.Count != 0)
            {
                foreach (DataRow dr in dt.Rows)
                {
                    ec.Add(FillEntity(dr));
                }
                return ec;
            }
            return null;
        }
       
        /// <summary>
        /// 依主键查询唯一记录条数
        /// </summary>
        /// <param name="keyValue"></param>
        /// <returns></returns>
        public T GetEntityByPrimaryKey(long keyValue)
        {
            string sql = SelectStatement + " where " + PrimaryKeyName + "=" + keyValue;
            DataTable dt = com.iccpp.DataBaseSevice.DataBase.GetDataTable(sql);
            if (dt.Rows.Count == 0)
                return null;
            else
                return FillEntity(dt.Rows[0]);
        }

        /// <summary>
        /// 获取该表所有实体
        /// </summary>
        public EntityCollection<T> GetEntityCollection()
        {
            DataTable dt = DataBase.GetDataTable(SelectStatement, 0, 0);
            EntityCollection<T> ec = new EntityCollection<T>();
            foreach (DataRow dr in dt.Rows)
            {
                ec.Add(FillEntity(dr));
            }
            return ec;
        }
        /// <summary>
        /// 检测并填充未赋值的日期
        /// </summary>
        /// <param name="EntityObj">实体对象</param>
        public void CheckEntityFillData(BaseEntity EntityObj)
        {
            if (EntityObj == null)
                throw new NotNullException();
            PropertyInfo[] propertys = EntityObj.GetType().GetProperties();
            foreach (PropertyInfo pinfo in propertys)
            {


                if (Convert.ToString(pinfo.PropertyType) == "System.DateTime")
                {
                    string timeValue = Convert.ToString(pinfo.GetValue(EntityObj, null));
                    if (timeValue == "0001-1-1 0:00:00" || timeValue == "0001/1/1 0:00:00")
                        pinfo.SetValue(EntityObj, new DateTime(1900, 1, 1), null);
                }
            }
        }


    }





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值