using ProjectBase.Data.Pager; using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ProjectBase.Data.BaseDAL { /// /// 数据访问层的接口 /// public interface IBaseDAL where T : BaseEntity { /// /// 定义一个操作记录的事件处理 /// event OperationLogEventHandler OnOperationLog; #region 通用操作 /// /// 获取表的所有记录数量 /// /// 事务对象 /// int GetRecordCount(DbTransaction trans = null); /// /// 获取表的指定条件记录数量 /// /// 条件语句 /// 事务对象 /// int GetRecordCount(string condition, DbTransaction trans = null); /// /// 根据condition条件,判断是否存在记录 /// /// 查询的条件 /// 事务对象 /// 如果存在返回True,否则False bool IsExistRecord(string condition, DbTransaction trans = null); /// /// 查询数据库,检查是否存在指定键值的对象 /// /// Hashtable:键[key]为字段名;值[value]为字段对应的值 /// 事务对象 /// 存在则返回true,否则为false bool IsExistKey(Hashtable recordTable, DbTransaction trans = null); /// /// 查询数据库,检查是否存在指定键值的对象 /// /// 指定的属性名 /// 指定的值 /// 事务对象 /// 存在则返回true,否则为false bool IsExistKey(string fieldName, object key, DbTransaction trans = null); /// /// 获取数据库中该对象的最大ID值 /// /// 事务对象 /// 最大ID值 int GetMaxID(DbTransaction trans = null); /// /// 根据主键和字段名称,获取对应字段的内容 /// /// 指定对象的ID /// 字段名称 /// 事务对象 /// string GetFieldValue(object key, string fieldName, DbTransaction trans = null); /// /// 根据指定对象的ID,从数据库中删除指定对象 /// /// 指定对象的ID /// 事务对象 /// 执行成功返回true,否则为false bool Delete(object key, string userId, DbTransaction trans = null); /// /// 根据指定条件,从数据库中删除指定对象 /// /// 删除记录的条件语句 /// 事务对象 /// Sql参数列表 /// 执行成功返回true,否则为false bool DeleteByCondition(string condition, DbTransaction trans = null, IDbDataParameter[] paramList = null); /// /// 插入指定对象到数据库中 /// /// 指定的对象 /// 事务对象 /// 执行成功返回True bool Insert(T obj, DbTransaction trans = null); /// /// 插入指定对象到数据库中,并返回自增长的键值 /// /// 指定的对象 /// 事务对象 /// 执行成功返回True int Insert2(T obj, DbTransaction trans = null); /// /// 更新对象属性到数据库中 /// /// 指定的对象 /// 主键的值 /// 事务对象 /// 执行成功返回true,否则为false bool Update(T obj, object primaryKeyValue, DbTransaction trans = null); /// /// 更新某个表一条记录(只适用于用单键,用string类型作键值的表) /// /// ID值 /// Hashtable:键[key]为字段名;值[value]为字段对应的值 /// 需要操作的目标表名称 /// 事务对象,如果使用事务,传入事务对象,否则为Null不使用事务 bool Update(object id, Hashtable recordField, string targetTable, DbTransaction trans); /// /// 插入或更新对象属性到数据库中 /// /// 指定的对象 /// 主键值 /// 事务对象 /// 执行成功返回true,否则为false bool InsertUpdate(T obj, object primaryKeyValue, DbTransaction trans = null); /// /// 如果不存在记录,则插入对象属性到数据库中 /// /// 指定的对象 /// 主键值 /// 事务对象 /// 执行插入成功返回true,否则为false bool InsertIfNew(T obj, object primaryKeyValue, DbTransaction trans = null); /// /// 执行SQL查询语句,返回查询结果的所有记录的第一个字段,用逗号分隔。 /// /// SQL语句 /// 事务对象 /// /// 返回查询结果的所有记录的第一个字段,用逗号分隔。 /// string SqlValueList(string sql, DbTransaction trans = null); /// /// 执行一些特殊的语句 /// /// SQL语句 /// 事务对象 int SqlExecute(string sql, DbTransaction trans = null); /// /// 执行存储过程函数。 /// /// 存储过程函数 /// 参数集合 /// 事务对象 /// int StoreProcExecute(string storeProcName, DbParameter[] parameters, DbTransaction trans = null); /// /// 执行SQL查询语句,返回所有记录的DataTable集合。 /// /// SQL查询语句 /// 事务对象 /// DataTable SqlTable(string sql, DbTransaction trans = null); /// /// 执行SQL查询语句,返回所有记录的DataTable集合。 /// /// SQL查询语句 /// SQL查询参数 /// 事务对象 /// DataTable SqlTable(string sql, DbParameter[] parameters, DbTransaction trans = null); /// /// 打开数据库连接,并创建事务对象 /// DbTransaction CreateTransaction(); /// /// 打开数据库连接,并创建事务对象 /// /// 事务级别 DbTransaction CreateTransaction(IsolationLevel level); /// /// 测试数据库是否正常连接 /// bool TestConnection(string connectionString); /// /// 执行sql语句 /// /// 执行类型 /// sql语句或存储过程 /// 事务对象 /// bool Update(CommandType commandType, string sql, DbTransaction trans = null); #endregion #region 返回实体类操作 /// /// 查询数据库,检查是否存在指定ID的对象 /// /// 对象的ID值 /// 事务对象 /// 存在则返回指定的对象,否则返回Null T FindByID(object key, DbTransaction trans = null); /// /// 根据条件查询数据库,如果存在返回第一个对象 /// /// 查询的条件 /// 事务对象 /// 指定的对象 T FindSingle(string condition, DbTransaction trans = null); /// /// 根据条件查询数据库,如果存在返回第一个对象 /// /// 查询的条件 /// 自定义排序语句,如Order By Name Desc;如不指定,则使用默认排序 /// 事务对象 /// 指定的对象 T FindSingle(string condition, string orderBy, DbTransaction trans = null); /// /// 根据条件查询数据库,如果存在返回第一个对象 /// /// 查询的条件 /// 自定义排序语句,如Order By Name Desc;如不指定,则使用默认排序 /// 参数列表 /// 事务对象 /// 指定的对象 T FindSingle(string condition, string orderBy, IDbDataParameter[] paramList, DbTransaction trans = null); /// /// 查找记录表中最新的一条记录 /// /// 事务对象 /// T FindLast(DbTransaction trans = null); /// /// 查找记录表中最旧的一条记录 /// /// 事务对象 /// T FindFirst(DbTransaction trans = null); #endregion #region 返回集合的接口 /// /// 根据ID字符串(逗号分隔)获取对象列表 /// /// ID字符串(逗号分隔) /// 事务对象 /// 符合条件的对象列表 List FindByIDs(string idString, DbTransaction trans = null); /// /// 根据条件查询数据库,并返回对象集合 /// /// 查询的条件 /// 事务对象 /// 指定对象的集合 List Find(string condition, DbTransaction trans = null); /// /// 根据条件查询数据库,并返回对象集合(用于分页数据显示) /// /// 查询的条件 /// 自定义排序语句,如Order By Name Desc;如不指定,则使用默认排序 /// 事务对象 /// 指定对象的集合 List Find(string condition, string orderBy, DbTransaction trans = null); /// /// 根据条件查询数据库,并返回对象集合(用于分页数据显示) /// /// 查询的条件 /// 自定义排序语句,如Order By Name Desc;如不指定,则使用默认排序 /// 参数列表 /// 事务对象 /// 指定对象的集合 List Find(string condition, string orderBy, IDbDataParameter[] paramList, DbTransaction trans = null); /// /// 通用获取集合对象方法 /// /// 查询的Sql语句 /// 参数列表,如果没有则为null /// 事务对象 /// List GetList(string sql, IDbDataParameter[] paramList = null, DbTransaction trans = null); /// /// 以分页方式通用获取集合对象方法 /// /// 查询的Sql语句 /// 分页实体 /// 参数列表,如果没有则为null /// 事务对象 /// List GetListWithPager(string sql, PagerInfo info, IDbDataParameter[] paramList = null, DbTransaction trans = null); /// /// 根据条件查询数据库,并返回对象集合(用于分页数据显示) /// /// 查询的条件 /// 分页实体 /// 事务对象 /// 指定对象的集合 List FindWithPager(string condition, PagerInfo info, DbTransaction trans = null); /// /// 根据条件查询数据库,并返回对象集合(用于分页数据显示) /// /// 查询的条件 /// 分页实体 /// 排序字段 /// 事务对象 /// 指定对象的集合 List FindWithPager(string condition, PagerInfo info, string fieldToSort, DbTransaction trans = null); /// /// 根据条件查询数据库,并返回对象集合(用于分页数据显示) /// /// 查询的条件 /// 分页实体 /// 排序字段 /// 是否降序 /// 事务对象 /// 指定对象的集合 List FindWithPager(string condition, PagerInfo info, string fieldToSort, bool desc, DbTransaction trans = null); /// /// 返回数据库所有的对象集合 /// /// 事务对象 /// 指定对象的集合 List GetAll(DbTransaction trans = null); /// /// 返回数据库所有的对象集合 /// /// 自定义排序语句,如Order By Name Desc;如不指定,则使用默认排序 /// 事务对象 /// 指定对象的集合 List GetAll(string orderBy, DbTransaction trans = null); /// /// 返回数据库所有的对象集合(用于分页数据显示) /// /// 分页实体信息 /// 事务对象 /// 指定对象的集合 List GetAll(PagerInfo info, DbTransaction trans = null); /// /// 返回数据库所有的对象集合(用于分页数据显示) /// /// 分页实体信息 /// 排序字段 /// 是否降序 /// 事务对象 /// 指定对象的集合 List GetAll(PagerInfo info, string fieldToSort, bool desc, DbTransaction trans = null); /// /// 返回所有记录到DataTable集合中 /// /// 事务对象 /// DataTable GetAllToDataTable(DbTransaction trans = null); /// /// 返回所有记录到DataTable集合中 /// /// 自定义排序语句,如Order By Name Desc;如不指定,则使用默认排序 /// 事务对象 /// DataTable GetAllToDataTable(string orderBy, DbTransaction trans = null); /// /// 根据分页条件,返回DataTable对象 /// /// 分页条件 /// 事务对象 /// DataTable GetAllToDataTable(PagerInfo info, DbTransaction trans = null); /// /// 根据分页条件,返回DataTable对象 /// /// 分页条件 /// 排序字段 /// 是否降序 /// 事务对象 /// DataTable GetAllToDataTable(PagerInfo info, string fieldToSort, bool desc, DbTransaction trans = null); /// /// 根据查询条件,返回记录到DataTable集合中 /// /// 查询条件 /// 事务对象 /// DataTable FindToDataTable(string condition, DbTransaction trans = null); /// /// 根据查询条件,返回记录到DataTable集合中 /// /// 查询条件 /// 分页条件 /// 事务对象 /// DataTable FindToDataTable(string condition, PagerInfo info, DbTransaction trans = null); /// /// 根据条件查询数据库,并返回DataTable集合(用于分页数据显示) /// /// 查询的条件 /// 分页实体 /// 排序字段 /// 是否降序 /// 事务对象 /// 指定DataTable的集合 DataTable FindToDataTable(string condition, PagerInfo info, string fieldToSort, bool desc, DbTransaction trans = null); /// /// 获取某字段数据字典列表 /// /// 字段名称 /// 事务对象 /// List GetFieldList(string fieldName, DbTransaction trans = null); /// /// 根据条件,获取某字段数据字典列表 /// /// 字段名称 /// 查询的条件 /// 事务对象 /// List GetFieldListByCondition(string fieldName, string condition, DbTransaction trans = null); /// /// 根据条件,从视图里面获取记录 /// /// 视图名称 /// 查询条件 /// 事务对象 /// DataTable FindByView(string viewName, string condition, DbTransaction trans = null); /// /// 根据条件,从视图里面获取记录 /// /// 视图名称 /// 查询条件 /// 排序字段 /// 是否为降序 /// 事务对象 /// DataTable FindByView(string viewName, string condition, string sortField, bool isDescending, DbTransaction trans = null); /// /// 获取前面记录指定数量的记录 /// /// 查询语句 /// 指定数量 /// 排序条件,例如order by id /// 事务对象 /// DataTable GetTopResult(string sql, int count, string orderBy, DbTransaction trans = null); /// /// 根据条件,从视图里面获取记录 /// /// 视图名称 /// 查询条件 /// 排序字段 /// 是否为降序 /// 分页条件 /// 事务对象 /// DataTable FindByViewWithPager(string viewName, string condition, string sortField, bool isDescending, PagerInfo info, DbTransaction trans = null); #endregion /// /// 设置数据库配置项名称 /// /// 数据库配置项名称 void SetDbConfigName(string dbConfigName); /// /// 初始化数据库表名 /// /// 数据库表名 void InitTableName(string tableName); /// /// 获取数据库的全部表名称 /// /// List GetTableNames(); /// /// 获取表的字段名称和数据类型列表 /// /// DataTable GetFieldTypeList(); /// /// 获取字段中文别名(用于界面显示)的字典集合 /// /// Dictionary GetColumnNameAlias(); /// /// 获取指定字段的报表数据 /// /// 表字段 /// 查询条件 /// DataTable GetReportData(string fieldName, string condition); } }