时间有限,先上代码,等有时间再来完善
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);
}
}
}
}