IBaseDAL.cs 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555
  1. using ProjectBase.Data.Pager;
  2. using System;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using System.Data;
  6. using System.Data.Common;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace ProjectBase.Data.BaseDAL
  11. {
  12. /// <summary>
  13. /// 数据访问层的接口
  14. /// </summary>
  15. public interface IBaseDAL<T> where T : BaseEntity
  16. {
  17. /// <summary>
  18. /// 定义一个操作记录的事件处理
  19. /// </summary>
  20. event OperationLogEventHandler OnOperationLog;
  21. #region 通用操作
  22. /// <summary>
  23. /// 获取表的所有记录数量
  24. /// </summary>
  25. /// <param name="trans">事务对象</param>
  26. /// <returns></returns>
  27. int GetRecordCount(DbTransaction trans = null);
  28. /// <summary>
  29. /// 获取表的指定条件记录数量
  30. /// </summary>
  31. /// <param name="condition">条件语句</param>
  32. /// <param name="trans">事务对象</param>
  33. /// <returns></returns>
  34. int GetRecordCount(string condition, DbTransaction trans = null);
  35. /// <summary>
  36. /// 根据condition条件,判断是否存在记录
  37. /// </summary>
  38. /// <param name="condition">查询的条件</param>
  39. /// <param name="trans">事务对象</param>
  40. /// <returns>如果存在返回True,否则False</returns>
  41. bool IsExistRecord(string condition, DbTransaction trans = null);
  42. /// <summary>
  43. /// 查询数据库,检查是否存在指定键值的对象
  44. /// </summary>
  45. /// <param name="recordTable">Hashtable:键[key]为字段名;值[value]为字段对应的值</param>
  46. /// <param name="trans">事务对象</param>
  47. /// <returns>存在则返回<c>true</c>,否则为<c>false</c>。</returns>
  48. bool IsExistKey(Hashtable recordTable, DbTransaction trans = null);
  49. /// <summary>
  50. /// 查询数据库,检查是否存在指定键值的对象
  51. /// </summary>
  52. /// <param name="fieldName">指定的属性名</param>
  53. /// <param name="key">指定的值</param>
  54. /// <param name="trans">事务对象</param>
  55. /// <returns>存在则返回<c>true</c>,否则为<c>false</c>。</returns>
  56. bool IsExistKey(string fieldName, object key, DbTransaction trans = null);
  57. /// <summary>
  58. /// 获取数据库中该对象的最大ID值
  59. /// </summary>
  60. /// <param name="trans">事务对象</param>
  61. /// <returns>最大ID值</returns>
  62. int GetMaxID(DbTransaction trans = null);
  63. /// <summary>
  64. /// 根据主键和字段名称,获取对应字段的内容
  65. /// </summary>
  66. /// <param name="key">指定对象的ID</param>
  67. /// <param name="fieldName">字段名称</param>
  68. /// <param name="trans">事务对象</param>
  69. /// <returns></returns>
  70. string GetFieldValue(object key, string fieldName, DbTransaction trans = null);
  71. /// <summary>
  72. /// 根据指定对象的ID,从数据库中删除指定对象
  73. /// </summary>
  74. /// <param name="key">指定对象的ID</param>
  75. /// <param name="trans">事务对象</param>
  76. /// <returns>执行成功返回<c>true</c>,否则为<c>false</c>。</returns>
  77. bool Delete(object key, string userId, DbTransaction trans = null);
  78. /// <summary>
  79. /// 根据指定条件,从数据库中删除指定对象
  80. /// </summary>
  81. /// <param name="condition">删除记录的条件语句</param>
  82. /// <param name="trans">事务对象</param>
  83. /// <param name="paramList">Sql参数列表</param>
  84. /// <returns>执行成功返回<c>true</c>,否则为<c>false</c>。</returns>
  85. bool DeleteByCondition(string condition, DbTransaction trans = null, IDbDataParameter[] paramList = null);
  86. /// <summary>
  87. /// 插入指定对象到数据库中
  88. /// </summary>
  89. /// <param name="obj">指定的对象</param>
  90. /// <param name="trans">事务对象</param>
  91. /// <returns>执行成功返回True</returns>
  92. bool Insert(T obj, DbTransaction trans = null);
  93. /// <summary>
  94. /// 插入指定对象到数据库中,并返回自增长的键值
  95. /// </summary>
  96. /// <param name="obj">指定的对象</param>
  97. /// <param name="trans">事务对象</param>
  98. /// <returns>执行成功返回True</returns>
  99. int Insert2(T obj, DbTransaction trans = null);
  100. /// <summary>
  101. /// 更新对象属性到数据库中
  102. /// </summary>
  103. /// <param name="obj">指定的对象</param>
  104. /// <param name="primaryKeyValue">主键的值</param>
  105. /// <param name="trans">事务对象</param>
  106. /// <returns>执行成功返回<c>true</c>,否则为<c>false</c>。</returns>
  107. bool Update(T obj, object primaryKeyValue, DbTransaction trans = null);
  108. /// <summary>
  109. /// 更新某个表一条记录(只适用于用单键,用string类型作键值的表)
  110. /// </summary>
  111. /// <param name="id">ID值</param>
  112. /// <param name="recordField">Hashtable:键[key]为字段名;值[value]为字段对应的值</param>
  113. /// <param name="targetTable">需要操作的目标表名称</param>
  114. /// <param name="trans">事务对象,如果使用事务,传入事务对象,否则为Null不使用事务</param>
  115. bool Update(object id, Hashtable recordField, string targetTable, DbTransaction trans);
  116. /// <summary>
  117. /// 插入或更新对象属性到数据库中
  118. /// </summary>
  119. /// <param name="obj">指定的对象</param>
  120. /// <param name="primaryKeyValue">主键值</param>
  121. /// <param name="trans">事务对象</param>
  122. /// <returns>执行成功返回<c>true</c>,否则为<c>false</c>。</returns>
  123. bool InsertUpdate(T obj, object primaryKeyValue, DbTransaction trans = null);
  124. /// <summary>
  125. /// 如果不存在记录,则插入对象属性到数据库中
  126. /// </summary>
  127. /// <param name="obj">指定的对象</param>
  128. /// <param name="primaryKeyValue">主键值</param>
  129. /// <param name="trans">事务对象</param>
  130. /// <returns>执行插入成功返回<c>true</c>,否则为<c>false</c>。</returns>
  131. bool InsertIfNew(T obj, object primaryKeyValue, DbTransaction trans = null);
  132. /// <summary>
  133. /// 执行SQL查询语句,返回查询结果的所有记录的第一个字段,用逗号分隔。
  134. /// </summary>
  135. /// <param name="sql">SQL语句</param>
  136. /// <param name="trans">事务对象</param>
  137. /// <returns>
  138. /// 返回查询结果的所有记录的第一个字段,用逗号分隔。
  139. /// </returns>
  140. string SqlValueList(string sql, DbTransaction trans = null);
  141. /// <summary>
  142. /// 执行一些特殊的语句
  143. /// </summary>
  144. /// <param name="sql">SQL语句</param>
  145. /// <param name="trans">事务对象</param>
  146. int SqlExecute(string sql, DbTransaction trans = null);
  147. /// <summary>
  148. /// 执行存储过程函数。
  149. /// </summary>
  150. /// <param name="storeProcName">存储过程函数</param>
  151. /// <param name="parameters">参数集合</param>
  152. /// <param name="trans">事务对象</param>
  153. /// <returns></returns>
  154. int StoreProcExecute(string storeProcName, DbParameter[] parameters, DbTransaction trans = null);
  155. /// <summary>
  156. /// 执行SQL查询语句,返回所有记录的DataTable集合。
  157. /// </summary>
  158. /// <param name="sql">SQL查询语句</param>
  159. /// <param name="trans">事务对象</param>
  160. /// <returns></returns>
  161. DataTable SqlTable(string sql, DbTransaction trans = null);
  162. /// <summary>
  163. /// 执行SQL查询语句,返回所有记录的DataTable集合。
  164. /// </summary>
  165. /// <param name="sql">SQL查询语句</param>
  166. /// <param name="parameters">SQL查询参数</param>
  167. /// <param name="trans">事务对象</param>
  168. /// <returns></returns>
  169. DataTable SqlTable(string sql, DbParameter[] parameters, DbTransaction trans = null);
  170. /// <summary>
  171. /// 打开数据库连接,并创建事务对象
  172. /// </summary>
  173. DbTransaction CreateTransaction();
  174. /// <summary>
  175. /// 打开数据库连接,并创建事务对象
  176. /// </summary>
  177. /// <param name="level">事务级别</param>
  178. DbTransaction CreateTransaction(IsolationLevel level);
  179. /// <summary>
  180. /// 测试数据库是否正常连接
  181. /// </summary>
  182. bool TestConnection(string connectionString);
  183. /// <summary>
  184. /// 执行sql语句
  185. /// </summary>
  186. /// <param name="commandType">执行类型</param>
  187. /// <param name="sql">sql语句或存储过程</param>
  188. /// <param name="trans">事务对象</param>
  189. /// <returns></returns>
  190. bool Update(CommandType commandType, string sql, DbTransaction trans = null);
  191. #endregion
  192. #region 返回实体类操作
  193. /// <summary>
  194. /// 查询数据库,检查是否存在指定ID的对象
  195. /// </summary>
  196. /// <param name="key">对象的ID值</param>
  197. /// <param name="trans">事务对象</param>
  198. /// <returns>存在则返回指定的对象,否则返回Null</returns>
  199. T FindByID(object key, DbTransaction trans = null);
  200. /// <summary>
  201. /// 根据条件查询数据库,如果存在返回第一个对象
  202. /// </summary>
  203. /// <param name="condition">查询的条件</param>
  204. /// <param name="trans">事务对象</param>
  205. /// <returns>指定的对象</returns>
  206. T FindSingle(string condition, DbTransaction trans = null);
  207. /// <summary>
  208. /// 根据条件查询数据库,如果存在返回第一个对象
  209. /// </summary>
  210. /// <param name="condition">查询的条件</param>
  211. /// <param name="orderBy">自定义排序语句,如Order By Name Desc;如不指定,则使用默认排序</param>
  212. /// <param name="trans">事务对象</param>
  213. /// <returns>指定的对象</returns>
  214. T FindSingle(string condition, string orderBy, DbTransaction trans = null);
  215. /// <summary>
  216. /// 根据条件查询数据库,如果存在返回第一个对象
  217. /// </summary>
  218. /// <param name="condition">查询的条件</param>
  219. /// <param name="orderBy">自定义排序语句,如Order By Name Desc;如不指定,则使用默认排序</param>
  220. /// <param name="paramList">参数列表</param>
  221. /// <param name="trans">事务对象</param>
  222. /// <returns>指定的对象</returns>
  223. T FindSingle(string condition, string orderBy, IDbDataParameter[] paramList, DbTransaction trans = null);
  224. /// <summary>
  225. /// 查找记录表中最新的一条记录
  226. /// </summary>
  227. /// <param name="trans">事务对象</param>
  228. /// <returns></returns>
  229. T FindLast(DbTransaction trans = null);
  230. /// <summary>
  231. /// 查找记录表中最旧的一条记录
  232. /// </summary>
  233. /// <param name="trans">事务对象</param>
  234. /// <returns></returns>
  235. T FindFirst(DbTransaction trans = null);
  236. #endregion
  237. #region 返回集合的接口
  238. /// <summary>
  239. /// 根据ID字符串(逗号分隔)获取对象列表
  240. /// </summary>
  241. /// <param name="idString">ID字符串(逗号分隔)</param>
  242. /// <param name="trans">事务对象</param>
  243. /// <returns>符合条件的对象列表</returns>
  244. List<T> FindByIDs(string idString, DbTransaction trans = null);
  245. /// <summary>
  246. /// 根据条件查询数据库,并返回对象集合
  247. /// </summary>
  248. /// <param name="condition">查询的条件</param>
  249. /// <param name="trans">事务对象</param>
  250. /// <returns>指定对象的集合</returns>
  251. List<T> Find(string condition, DbTransaction trans = null);
  252. /// <summary>
  253. /// 根据条件查询数据库,并返回对象集合(用于分页数据显示)
  254. /// </summary>
  255. /// <param name="condition">查询的条件</param>
  256. /// <param name="orderBy">自定义排序语句,如Order By Name Desc;如不指定,则使用默认排序</param>
  257. /// <param name="trans">事务对象</param>
  258. /// <returns>指定对象的集合</returns>
  259. List<T> Find(string condition, string orderBy, DbTransaction trans = null);
  260. /// <summary>
  261. /// 根据条件查询数据库,并返回对象集合(用于分页数据显示)
  262. /// </summary>
  263. /// <param name="condition">查询的条件</param>
  264. /// <param name="orderBy">自定义排序语句,如Order By Name Desc;如不指定,则使用默认排序</param>
  265. /// <param name="paramList">参数列表</param>
  266. /// <param name="trans">事务对象</param>
  267. /// <returns>指定对象的集合</returns>
  268. List<T> Find(string condition, string orderBy, IDbDataParameter[] paramList, DbTransaction trans = null);
  269. /// <summary>
  270. /// 通用获取集合对象方法
  271. /// </summary>
  272. /// <param name="sql">查询的Sql语句</param>
  273. /// <param name="paramList">参数列表,如果没有则为null</param>
  274. /// <param name="trans">事务对象</param>
  275. /// <returns></returns>
  276. List<T> GetList(string sql, IDbDataParameter[] paramList = null, DbTransaction trans = null);
  277. /// <summary>
  278. /// 以分页方式通用获取集合对象方法
  279. /// </summary>
  280. /// <param name="sql">查询的Sql语句</param>
  281. /// <param name="info">分页实体</param>
  282. /// <param name="paramList">参数列表,如果没有则为null</param>
  283. /// <param name="trans">事务对象</param>
  284. /// <returns></returns>
  285. List<T> GetListWithPager(string sql, PagerInfo info, IDbDataParameter[] paramList = null, DbTransaction trans = null);
  286. /// <summary>
  287. /// 根据条件查询数据库,并返回对象集合(用于分页数据显示)
  288. /// </summary>
  289. /// <param name="condition">查询的条件</param>
  290. /// <param name="info">分页实体</param>
  291. /// <param name="trans">事务对象</param>
  292. /// <returns>指定对象的集合</returns>
  293. List<T> FindWithPager(string condition, PagerInfo info, DbTransaction trans = null);
  294. /// <summary>
  295. /// 根据条件查询数据库,并返回对象集合(用于分页数据显示)
  296. /// </summary>
  297. /// <param name="condition">查询的条件</param>
  298. /// <param name="info">分页实体</param>
  299. /// <param name="fieldToSort">排序字段</param>
  300. /// <param name="trans">事务对象</param>
  301. /// <returns>指定对象的集合</returns>
  302. List<T> FindWithPager(string condition, PagerInfo info, string fieldToSort, DbTransaction trans = null);
  303. /// <summary>
  304. /// 根据条件查询数据库,并返回对象集合(用于分页数据显示)
  305. /// </summary>
  306. /// <param name="condition">查询的条件</param>
  307. /// <param name="info">分页实体</param>
  308. /// <param name="fieldToSort">排序字段</param>
  309. /// <param name="desc">是否降序</param>
  310. /// <param name="trans">事务对象</param>
  311. /// <returns>指定对象的集合</returns>
  312. List<T> FindWithPager(string condition, PagerInfo info, string fieldToSort, bool desc, DbTransaction trans = null);
  313. /// <summary>
  314. /// 返回数据库所有的对象集合
  315. /// </summary>
  316. /// <param name="trans">事务对象</param>
  317. /// <returns>指定对象的集合</returns>
  318. List<T> GetAll(DbTransaction trans = null);
  319. /// <summary>
  320. /// 返回数据库所有的对象集合
  321. /// </summary>
  322. /// <param name="orderBy">自定义排序语句,如Order By Name Desc;如不指定,则使用默认排序</param>
  323. /// <param name="trans">事务对象</param>
  324. /// <returns>指定对象的集合</returns>
  325. List<T> GetAll(string orderBy, DbTransaction trans = null);
  326. /// <summary>
  327. /// 返回数据库所有的对象集合(用于分页数据显示)
  328. /// </summary>
  329. /// <param name="info">分页实体信息</param>
  330. /// <param name="trans">事务对象</param>
  331. /// <returns>指定对象的集合</returns>
  332. List<T> GetAll(PagerInfo info, DbTransaction trans = null);
  333. /// <summary>
  334. /// 返回数据库所有的对象集合(用于分页数据显示)
  335. /// </summary>
  336. /// <param name="info">分页实体信息</param>
  337. /// <param name="fieldToSort">排序字段</param>
  338. /// <param name="desc">是否降序</param>
  339. /// <param name="trans">事务对象</param>
  340. /// <returns>指定对象的集合</returns>
  341. List<T> GetAll(PagerInfo info, string fieldToSort, bool desc, DbTransaction trans = null);
  342. /// <summary>
  343. /// 返回所有记录到DataTable集合中
  344. /// </summary>
  345. /// <param name="trans">事务对象</param>
  346. /// <returns></returns>
  347. DataTable GetAllToDataTable(DbTransaction trans = null);
  348. /// <summary>
  349. /// 返回所有记录到DataTable集合中
  350. /// </summary>
  351. /// <param name="orderBy">自定义排序语句,如Order By Name Desc;如不指定,则使用默认排序</param>
  352. /// <param name="trans">事务对象</param>
  353. /// <returns></returns>
  354. DataTable GetAllToDataTable(string orderBy, DbTransaction trans = null);
  355. /// <summary>
  356. /// 根据分页条件,返回DataTable对象
  357. /// </summary>
  358. /// <param name="info">分页条件</param>
  359. /// <param name="trans">事务对象</param>
  360. /// <returns></returns>
  361. DataTable GetAllToDataTable(PagerInfo info, DbTransaction trans = null);
  362. /// <summary>
  363. /// 根据分页条件,返回DataTable对象
  364. /// </summary>
  365. /// <param name="info">分页条件</param>
  366. /// <param name="fieldToSort">排序字段</param>
  367. /// <param name="desc">是否降序</param>
  368. /// <param name="trans">事务对象</param>
  369. /// <returns></returns>
  370. DataTable GetAllToDataTable(PagerInfo info, string fieldToSort, bool desc, DbTransaction trans = null);
  371. /// <summary>
  372. /// 根据查询条件,返回记录到DataTable集合中
  373. /// </summary>
  374. /// <param name="condition">查询条件</param>
  375. /// <param name="trans">事务对象</param>
  376. /// <returns></returns>
  377. DataTable FindToDataTable(string condition, DbTransaction trans = null);
  378. /// <summary>
  379. /// 根据查询条件,返回记录到DataTable集合中
  380. /// </summary>
  381. /// <param name="condition">查询条件</param>
  382. /// <param name="info">分页条件</param>
  383. /// <param name="trans">事务对象</param>
  384. /// <returns></returns>
  385. DataTable FindToDataTable(string condition, PagerInfo info, DbTransaction trans = null);
  386. /// <summary>
  387. /// 根据条件查询数据库,并返回DataTable集合(用于分页数据显示)
  388. /// </summary>
  389. /// <param name="condition">查询的条件</param>
  390. /// <param name="info">分页实体</param>
  391. /// <param name="fieldToSort">排序字段</param>
  392. /// <param name="desc">是否降序</param>
  393. /// <param name="trans">事务对象</param>
  394. /// <returns>指定DataTable的集合</returns>
  395. DataTable FindToDataTable(string condition, PagerInfo info, string fieldToSort, bool desc, DbTransaction trans = null);
  396. /// <summary>
  397. /// 获取某字段数据字典列表
  398. /// </summary>
  399. /// <param name="fieldName">字段名称</param>
  400. /// <param name="trans">事务对象</param>
  401. /// <returns></returns>
  402. List<string> GetFieldList(string fieldName, DbTransaction trans = null);
  403. /// <summary>
  404. /// 根据条件,获取某字段数据字典列表
  405. /// </summary>
  406. /// <param name="fieldName">字段名称</param>
  407. /// <param name="condition">查询的条件</param>
  408. /// <param name="trans">事务对象</param>
  409. /// <returns></returns>
  410. List<string> GetFieldListByCondition(string fieldName, string condition, DbTransaction trans = null);
  411. /// <summary>
  412. /// 根据条件,从视图里面获取记录
  413. /// </summary>
  414. /// <param name="viewName">视图名称</param>
  415. /// <param name="condition">查询条件</param>
  416. /// <param name="trans">事务对象</param>
  417. /// <returns></returns>
  418. DataTable FindByView(string viewName, string condition, DbTransaction trans = null);
  419. /// <summary>
  420. /// 根据条件,从视图里面获取记录
  421. /// </summary>
  422. /// <param name="viewName">视图名称</param>
  423. /// <param name="condition">查询条件</param>
  424. /// <param name="sortField">排序字段</param>
  425. /// <param name="isDescending">是否为降序</param>
  426. /// <param name="trans">事务对象</param>
  427. /// <returns></returns>
  428. DataTable FindByView(string viewName, string condition, string sortField, bool isDescending, DbTransaction trans = null);
  429. /// <summary>
  430. /// 获取前面记录指定数量的记录
  431. /// </summary>
  432. /// <param name="sql">查询语句</param>
  433. /// <param name="count">指定数量</param>
  434. /// <param name="orderBy">排序条件,例如order by id</param>
  435. /// <param name="trans">事务对象</param>
  436. /// <returns></returns>
  437. DataTable GetTopResult(string sql, int count, string orderBy, DbTransaction trans = null);
  438. /// <summary>
  439. /// 根据条件,从视图里面获取记录
  440. /// </summary>
  441. /// <param name="viewName">视图名称</param>
  442. /// <param name="condition">查询条件</param>
  443. /// <param name="sortField">排序字段</param>
  444. /// <param name="isDescending">是否为降序</param>
  445. /// <param name="info">分页条件</param>
  446. /// <param name="trans">事务对象</param>
  447. /// <returns></returns>
  448. DataTable FindByViewWithPager(string viewName, string condition, string sortField, bool isDescending, PagerInfo info, DbTransaction trans = null);
  449. #endregion
  450. /// <summary>
  451. /// 设置数据库配置项名称
  452. /// </summary>
  453. /// <param name="dbConfigName">数据库配置项名称</param>
  454. void SetDbConfigName(string dbConfigName);
  455. /// <summary>
  456. /// 初始化数据库表名
  457. /// </summary>
  458. /// <param name="tableName">数据库表名</param>
  459. void InitTableName(string tableName);
  460. /// <summary>
  461. /// 获取数据库的全部表名称
  462. /// </summary>
  463. /// <returns></returns>
  464. List<string> GetTableNames();
  465. /// <summary>
  466. /// 获取表的字段名称和数据类型列表
  467. /// </summary>
  468. /// <returns></returns>
  469. DataTable GetFieldTypeList();
  470. /// <summary>
  471. /// 获取字段中文别名(用于界面显示)的字典集合
  472. /// </summary>
  473. /// <returns></returns>
  474. Dictionary<string, string> GetColumnNameAlias();
  475. /// <summary>
  476. /// 获取指定字段的报表数据
  477. /// </summary>
  478. /// <param name="fieldName">表字段</param>
  479. /// <param name="condition">查询条件</param>
  480. /// <returns></returns>
  481. DataTable GetReportData(string fieldName, string condition);
  482. }
  483. }