PersistSingle.cs 56 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Text.RegularExpressions;
  5. using System.Data;
  6. using System.Data.Common;
  7. using System.Reflection;
  8. using Ant.Data;
  9. using System.Transactions;
  10. using System.Configuration;
  11. using Ant.Frame;
  12. using Ant.ORM;
  13. using Ant.Common;
  14. using Ant.Descriptors;
  15. using System.Linq;
  16. namespace Ant.ORM
  17. {
  18. /// <summary>
  19. /// 单表操作数据持久类
  20. /// <remarks>要求配置Ant.Data配置节</remarks>
  21. /// </summary>
  22. public static class PersistSingle
  23. {
  24. private static object lockHelper = new object();
  25. //private static string logfile = ConfigurationManager.AppSettings["DataDynamicsARLic"].ToLower();
  26. private static Dictionary<string, QueryParameterCollection> SqlCmd = new Dictionary<string, QueryParameterCollection>();
  27. #region 将实体转成SQL语句
  28. #region 添加修改方法
  29. /// <summary>
  30. /// 保存数据
  31. /// </summary>
  32. /// <param name="entity"></param>
  33. /// <param name="request"></param>
  34. /// <returns></returns>
  35. public static ResponseModel SaveDesc<T>(this T entity, RequestModel request)
  36. {
  37. System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
  38. sw.Start();
  39. ResponseModel result = new ResponseModel(); QueryCommand cmd = new QueryCommand(); string sqlWithComment = string.Empty;
  40. try
  41. {
  42. TypeDescriptor md = TypeDescriptor.ParserMeta(entity);//获取实体的元数据
  43. if (request.db.IsNull())
  44. request.db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
  45. if (request.db.IsNull())
  46. {
  47. result.IsSuccess = false;
  48. result.Message = "数据库配置不正确";
  49. return result;
  50. }
  51. if (request.newSt.IsNull())
  52. {
  53. result.IsSuccess = false;
  54. result.Message = "备注信息不能为空";
  55. return result;
  56. }
  57. else
  58. {
  59. if (request.newSt.NewSt.IsNull())
  60. {
  61. result.IsSuccess = false;
  62. result.Message = "备注信息不能为空";
  63. return result;
  64. }
  65. }
  66. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(request.db.DatabaseType);//构建生成哪种SQL语句
  67. qcBuilder.TypeDes = md;//所有实体属性
  68. qcBuilder.PersistType = md.PersistType;
  69. cmd = qcBuilder.GetQueryCommand();//解析SQL语句
  70. System.Diagnostics.StackFrame[] sfs = request.newSt.NewSt.GetFrames();
  71. if (sfs.Count() > 0)
  72. {
  73. System.Diagnostics.StackFrame infos = sfs[0];
  74. System.Reflection.MethodBase mb = infos.GetMethod();
  75. var filename = infos.GetFileName();
  76. sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", request.newSt.Author, request.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName);
  77. }
  78. result.DBConfig = request.db.ConnectionString;
  79. int num = 0; var location = cmd.CommandText.EndsWith(ConstSql.SQL_SCOPE_IDENTITY, StringComparison.CurrentCultureIgnoreCase);
  80. if (location)
  81. {
  82. num = (!cmd.CommandText.IsEmpty()) ? request.db.ExecuteScalar(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters).ToInt32() : 0;//执行SQL语句
  83. result.RecordNum = num;
  84. }
  85. else
  86. {
  87. num = (!cmd.CommandText.IsEmpty()) ? request.db.ExecuteNonQuery(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters).ToInt32() : 0;
  88. }
  89. result.IsSuccess = num > 0;
  90. sw.Stop();
  91. string str = sw.Elapsed.ToString();
  92. result.Message = "保存成功,用时:" + str;
  93. sw = null;
  94. }
  95. catch (Exception ex)
  96. {
  97. //LogHelper.WriteExLog(ex);
  98. result.IsSuccess = false;
  99. result.Message = ex.ToString();
  100. }
  101. finally
  102. {
  103. string showsqlstr = string.Format(@"{0}{1}", cmd.SqlString, sqlWithComment);
  104. result.StrSql = showsqlstr;
  105. if (request.db.IfNotNull()) request.db.Close();
  106. }
  107. return result;
  108. }
  109. /// <summary>
  110. /// 根据查询实体去批量更新数据
  111. /// </summary>
  112. /// <param name="entity"></param>
  113. /// <param name="request"></param>
  114. /// <returns></returns>
  115. public static ResponseModel UpdateEntityDesc(this object entity, ResquestUpdateModel request)
  116. {
  117. ResponseModel result = new ResponseModel(); QueryCommand cmd = new QueryCommand();
  118. try
  119. {
  120. System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
  121. sw.Start();
  122. TypeDescriptor md = (request.QueryModel.IfNotNull()) ? TypeDescriptor.ParserMeta(entity, request.QueryModel) : TypeDescriptor.ParserMeta(entity);//获取实体的元数据
  123. if (request.db.IsNull()) request.db = DataAccessFactory.CreateDataConnection(md.ModuleName, DataConfigEnum.WriteData);//创建数据库连接
  124. if (request.db.IsNull())
  125. {
  126. result.IsSuccess = false;
  127. result.Message = "数据库配置不正确";
  128. return result;
  129. }
  130. if (request.newSt.IsNull())
  131. {
  132. result.IsSuccess = false;
  133. result.Message = "备注信息不能为空";
  134. return result;
  135. }
  136. else
  137. {
  138. if (request.newSt.NewSt.IsNull())
  139. {
  140. result.IsSuccess = false;
  141. result.Message = "备注信息不能为空";
  142. return result;
  143. }
  144. }
  145. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(request.db.DatabaseType);////构建生成哪种SQL语句
  146. qcBuilder.TypeDes = md;
  147. qcBuilder.PersistType = EntityPersistType.Update;
  148. qcBuilder.Predicate = request.Predicate;
  149. cmd = qcBuilder.GetQueryCommand();//解析SQL语句
  150. int num = request.db.ExecuteNonQuery(cmd.CommandText, cmd.Parameters);//执行SQL语句
  151. sw.Stop();
  152. string str = sw.Elapsed.ToString();
  153. result.IsSuccess = num > 0;
  154. result.Message = "数据更新成功,用时:" + str;
  155. }
  156. catch (Exception ex)
  157. {
  158. result.IsSuccess = false;
  159. result.Message = ex.ToString();
  160. }
  161. finally
  162. {
  163. result.StrSql = cmd.SqlString;
  164. result.DBConfig = request.db.ConnectionString;
  165. if (!request.db.IsNull()) request.db.Close();
  166. }
  167. return result;
  168. }
  169. /// <summary>
  170. /// 更新自带Where条件的数据
  171. /// </summary>
  172. /// <param name="entyvlaue">更新的数据</param>
  173. /// <param name="filter">更新的条件</param>
  174. /// <param name="db">连接数据库对象</param>
  175. /// <returns></returns>
  176. public static bool UpdateEntity(object entyvlaue, object filter, DataAccess db = null)
  177. {
  178. try
  179. {
  180. SqlCmd = new Dictionary<string, QueryParameterCollection>();
  181. TypeDescriptor md = TypeDescriptor.ParserMeta(entyvlaue, filter);//获取实体的元数据
  182. if (!string.IsNullOrEmpty(md.WhereSql))
  183. {
  184. if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName, DataConfigEnum.WriteData);//创建数据库连接
  185. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//根据不同的数据库类型创建不同的SQL语句的类
  186. qcBuilder.TypeDes = md;
  187. qcBuilder.PersistType = EntityPersistType.Update;
  188. qcBuilder.Fields = MetaDataManager.GetEntityFields(entyvlaue);
  189. QueryCommand cmd = qcBuilder.GetQueryCommand();//解析SQL语句
  190. SqlCmd.Add(cmd.CommandText, cmd.Parameters);
  191. int num = db.ExecuteNonQuery(cmd.CommandText, cmd.Parameters);//执行SQL语句
  192. return num > 0;
  193. }
  194. else
  195. {
  196. SqlCmd.Add("没有更新Where条件,无法更新操作", null);
  197. return false;
  198. }
  199. }
  200. catch (Exception ex)
  201. {
  202. return false;
  203. }
  204. finally
  205. {
  206. if (!db.IsNull()) db.Close();
  207. }
  208. }
  209. #endregion
  210. #region 删除DELETE方法
  211. /// <summary>
  212. /// 删除最终方法
  213. /// </summary>
  214. /// <typeparam name="T"></typeparam>
  215. /// <param name="entity"></param>
  216. /// <param name="request"></param>
  217. /// <returns></returns>
  218. public static ResponseModel DeleteDesc(this object entity, RequestModel request)
  219. {
  220. ResponseModel result = new ResponseModel(); QueryCommand cmd = new QueryCommand(); string sqlWithComment = string.Empty;
  221. try
  222. {
  223. System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
  224. sw.Start();
  225. TypeDescriptor md = TypeDescriptor.ParserMeta(entity); //获取实体的元数据
  226. if (request.db.IsNull()) request.db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
  227. if (request.db.IsNull())
  228. {
  229. result.IsSuccess = false;
  230. result.Message = "数据库配置不正确";
  231. return result;
  232. }
  233. if (request.newSt.IsNull())
  234. {
  235. result.IsSuccess = false;
  236. result.Message = "备注信息不能为空";
  237. return result;
  238. }
  239. else
  240. {
  241. if (request.newSt.NewSt.IsNull())
  242. {
  243. result.IsSuccess = false;
  244. result.Message = "备注信息不能为空";
  245. return result;
  246. }
  247. }
  248. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(request.db.DatabaseType);////构建生成哪种SQL语句
  249. qcBuilder.TypeDes = md;
  250. qcBuilder.PersistType = EntityPersistType.Delete;
  251. cmd = qcBuilder.GetQueryCommand();
  252. System.Diagnostics.StackFrame[] sfs = request.newSt.NewSt.GetFrames();
  253. if (sfs.Count() > 0)
  254. {
  255. System.Diagnostics.StackFrame infos = sfs[0];
  256. System.Reflection.MethodBase mb = infos.GetMethod();
  257. var filename = infos.GetFileName();
  258. sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", request.newSt.Author, request.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName);
  259. }
  260. int num = request.db.ExecuteNonQuery(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters);//执行SQL语句
  261. sw.Stop();
  262. string str = sw.Elapsed.ToString();
  263. result.IsSuccess = num > 0;
  264. result.Message = "删除成功,用时:" + str;
  265. sw = null;
  266. }
  267. catch (Exception ex)
  268. {
  269. //LogHelper.WriteExLog(ex);
  270. //
  271. result.IsSuccess = false;
  272. result.Message = ex.ToString();
  273. }
  274. finally
  275. {
  276. result.StrSql = cmd.SqlString;
  277. result.DBConfig = request.db.ConnectionString;
  278. if (!request.db.IsNull()) request.db.Close();
  279. }
  280. return result;
  281. }
  282. /// <summary>
  283. /// 删除操作
  284. /// public static bool DeleteById<T>(this object entity, string oid, DataAccess db = null) where T : EntityBase, new()
  285. /// </summary>
  286. /// <typeparam name="T"></typeparam>
  287. /// <param name="entity"></param>
  288. /// <param name="oid"></param>
  289. /// <param name="db"></param>
  290. /// <returns></returns>
  291. public static bool DeleteById(this object entity, string oid, DataAccess db = null)
  292. {
  293. SqlCmd = new Dictionary<string, QueryParameterCollection>();
  294. try
  295. {
  296. TypeDescriptor md = TypeDescriptor.ParserMeta(entity); //获取实体的元数据
  297. md.WhereSql = ModPerkey(md.PrimaryKey.MemberInfo.Name, oid);//自定义查询
  298. if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName, DataConfigEnum.WriteData);//创建数据库连接
  299. using (db)
  300. {
  301. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//构建生成哪种SQL语句
  302. qcBuilder.TypeDes = md;
  303. qcBuilder.PersistType = EntityPersistType.Delete;
  304. QueryCommand cmd = qcBuilder.GetQueryCommand();
  305. int num = 0;
  306. SqlCmd.Add(cmd.CommandText, cmd.Parameters);
  307. num = db.ExecuteNonQuery(cmd.CommandText, cmd.Parameters);//执行SQL语句
  308. return num > 0;
  309. }
  310. }
  311. catch (Exception ex)
  312. {
  313. throw ex;
  314. }
  315. finally
  316. {
  317. if (!db.IsNull()) db.Close();
  318. }
  319. }
  320. #endregion
  321. #region 获取单个实体
  322. /// <summary>
  323. /// 获取单个实体简化版
  324. /// </summary>
  325. /// <typeparam name="entity">实体类型</typeparam>
  326. /// <param name="oid">主键ID</param>
  327. /// <param name="db">数据库对象</param>
  328. /// <returns></returns>
  329. public static dynamic GetById(this object entity, string oid, DataAccess db = null)
  330. {
  331. var obj = Activator.CreateInstance(entity.GetType()); SqlCmd = new Dictionary<string, QueryParameterCollection>();
  332. try
  333. {
  334. if (!string.IsNullOrEmpty(oid))
  335. {
  336. QueryCommandBuilders querycommd = new QueryCommandBuilders();
  337. TypeDescriptor md = TypeDescriptor.ParserMeta(entity);//获取实体的元数据
  338. if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName, DataConfigEnum.WriteData);//创建数据库连接
  339. using (db)
  340. {
  341. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//构建生成哪种SQL语句
  342. qcBuilder.TypeDes = md;
  343. qcBuilder.PersistType = EntityPersistType.Query;
  344. md.WhereSql = ModPerkey(md.PrimaryKey.MemberInfo.Name, oid);//自定义查询
  345. qcBuilder.Top = "1";
  346. qcBuilder.SqlType = SqlEnum.MainSql;
  347. QueryCommand cmd = qcBuilder.GetQueryCommand();
  348. SqlCmd.Add(cmd.CommandText, cmd.Parameters);
  349. using (IDataReader rdr = db.ExecuteDataReader(cmd.CommandText, cmd.Parameters))
  350. {
  351. obj = DataToModel.Dr2EnObj(rdr, entity);
  352. }
  353. }
  354. }
  355. }
  356. catch (Exception ex)
  357. {
  358. throw ex;
  359. }
  360. finally
  361. {
  362. if (!db.IsNull()) db.Close();
  363. }
  364. return obj;
  365. }
  366. /// <summary>
  367. /// 获取单个实体最终方法
  368. /// </summary>
  369. /// <param name="entity"></param>
  370. /// <param name="request"></param>
  371. /// <returns></returns>
  372. public static ResponseModel GetEntityDesc(this object entity, RequestModel request)
  373. {
  374. System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
  375. sw.Start();
  376. object obj = Activator.CreateInstance(entity.GetType());
  377. DataAccess db = request.db;
  378. var result = new ResponseModel(); var typeDescriptor = TypeDescriptor.ParserMeta(entity);
  379. QueryCommand cmd = new QueryCommand(); string sqlWithComment = string.Empty;
  380. try
  381. {
  382. if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(typeDescriptor.ModuleName, DataConfigEnum.WriteData);//创建数据库连接
  383. if (db.IsNull())
  384. {
  385. result.IsSuccess = false;
  386. result.Message = "数据库配置不正确";
  387. return result;
  388. }
  389. if (request.newSt.IsNull())
  390. {
  391. result.IsSuccess = false;
  392. result.Message = "备注信息不能为空";
  393. return result;
  394. }
  395. else
  396. {
  397. if (request.newSt.NewSt.IsNull())
  398. {
  399. result.IsSuccess = false;
  400. result.Message = "备注信息不能为空";
  401. return result;
  402. }
  403. }
  404. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType); //构建生成哪种SQL语句
  405. qcBuilder.TypeDes = typeDescriptor;
  406. qcBuilder.PersistType = EntityPersistType.Query;
  407. //qcBuilder.SelectField = enty.SelectField;
  408. qcBuilder.Predicate = request.Predicate;
  409. qcBuilder.Top = "1";
  410. qcBuilder.SqlType = SqlEnum.MainSql;
  411. qcBuilder.Sort = request.Sort;
  412. cmd = qcBuilder.GetQueryCommand(); //生成SQL语句和参数
  413. System.Diagnostics.StackFrame[] sfs = request.newSt.NewSt.GetFrames();
  414. if (sfs.Count() > 0)
  415. {
  416. System.Diagnostics.StackFrame infos = sfs[0];
  417. System.Reflection.MethodBase mb = infos.GetMethod();
  418. var filename = infos.GetFileName();
  419. sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", request.newSt.Author, request.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName);
  420. }
  421. using (IDataReader rdr = db.ExecuteDataReader(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters))
  422. {
  423. DataTable dtt = DataToModel.Dr2Dt(rdr);
  424. obj = DataToModel.Dt2EnObj(dtt, entity);
  425. }
  426. sw.Stop();
  427. string str = sw.Elapsed.ToString();
  428. result.IsSuccess = obj.IfNotNull();
  429. result.ResultModel = obj;
  430. result.Message = "获取实体成功,用时:" + str;
  431. return result;
  432. }
  433. catch (Exception ex)
  434. {
  435. //LogHelper.WriteExLog(ex);
  436. result.IsSuccess = false;
  437. result.Message = ex.ToString();
  438. return result;
  439. }
  440. finally
  441. {
  442. string showsqlstr = string.Format(@"{0}{1}", cmd.SqlString, sqlWithComment);
  443. result.StrSql = showsqlstr;
  444. result.DBConfig = db.ConnectionString;
  445. if (!db.IsNull()) db.Close();
  446. }
  447. }
  448. #endregion
  449. #region 分页查询调用方法
  450. /// <summary>
  451. /// 获取分页数据返回实体集合
  452. /// </summary>
  453. /// <param name="request"></param>
  454. /// <returns></returns>
  455. public static ResponseModel GetPageListEnd(this object entity, RequestModel request)
  456. {
  457. var result = new ResponseModel(); QueryCommand cmd = new QueryCommand();
  458. var db = request.db;
  459. try
  460. {
  461. System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
  462. sw.Start();
  463. //QueryCommandBuilders querycommd = new QueryCommandBuilders();
  464. var typeDescriptor = TypeDescriptor.ParserMeta(entity);//获取实体的元数据
  465. //if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
  466. if (db.IsNull())
  467. {
  468. result.IsSuccess = false;
  469. result.Message = "数据库配置不正确";
  470. return result;
  471. }
  472. if (request.newSt.IsNull())
  473. {
  474. result.IsSuccess = false;
  475. result.Message = "备注信息不能为空";
  476. return result;
  477. }
  478. else
  479. {
  480. if (request.newSt.NewSt.IsNull())
  481. {
  482. result.IsSuccess = false;
  483. result.Message = "备注信息不能为空";
  484. return result;
  485. }
  486. }
  487. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句
  488. qcBuilder.TypeDes = typeDescriptor;//实体属性
  489. qcBuilder.PersistType = EntityPersistType.QueryPage;//操作方式
  490. qcBuilder.PageNo = request.StartNum;
  491. qcBuilder.PageSize = request.PageSize;
  492. //qcBuilder.SelectField = enty.SelectField;
  493. qcBuilder.ShowField = request.ShowField;
  494. qcBuilder.Predicate = request.Predicate;
  495. cmd = qcBuilder.GetQueryCommand();
  496. System.Diagnostics.StackFrame[] sfs = request.newSt.NewSt.GetFrames();
  497. string sqlWithComment = string.Empty;
  498. if (sfs.Count() > 0)
  499. {
  500. System.Diagnostics.StackFrame infos = sfs[0];
  501. System.Reflection.MethodBase mb = infos.GetMethod();
  502. var filename = infos.GetFileName();
  503. sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", request.newSt.Author, request.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName);
  504. }
  505. var dt = db.ExecuteDataReader(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters);
  506. var objlist = DataToModel.Dr2EnList(dt, entity);
  507. sw.Stop();
  508. string str = sw.Elapsed.ToString();
  509. result.IsSuccess = true;
  510. result.ResultModel = objlist;
  511. result.RecordNum = PageSumEnd(typeDescriptor, db, sqlWithComment).RecordNum;
  512. result.Message = "查询成功,用时:" + str;
  513. return result;
  514. }
  515. catch (Exception ex)
  516. {
  517. //LogHelper.WriteExLog(ex);
  518. result.IsSuccess = false;
  519. result.Message = ex.ToString();
  520. cmd = new QueryCommand();
  521. return result;
  522. }
  523. finally
  524. {
  525. result.StrSql = cmd.SqlString;
  526. result.DBConfig = db.ConnectionString;
  527. if (!db.IsNull()) db.Close();
  528. }
  529. }
  530. /// <summary>
  531. /// 带分页的统计记录
  532. /// </summary>
  533. /// <param name="md"></param>
  534. /// <param name="db"></param>
  535. /// <param name="sqlWithComment"></param>
  536. /// <returns></returns>
  537. private static ResponseModel PageSumEnd(TypeDescriptor md, DataAccess db, string sqlWithComment)
  538. {
  539. ResponseModel result = new ResponseModel(); QueryCommand cmd = new QueryCommand();
  540. try
  541. {
  542. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句
  543. qcBuilder.TypeDes = md;
  544. qcBuilder.PersistType = EntityPersistType.Sum;
  545. cmd = qcBuilder.GetQueryCommand();
  546. var num = db.ExecuteScalar(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters).ToInt32();
  547. result.RecordNum = num;
  548. result.IsSuccess = true;
  549. result.Message = "返回成功";
  550. }
  551. catch (Exception ex)
  552. {
  553. //LogHelper.WriteExLog(ex);
  554. result.IsSuccess = false;
  555. result.Message = ex.ToString();
  556. }
  557. finally
  558. {
  559. result.StrSql = cmd.SqlString;
  560. result.DBConfig = db.ConnectionString;
  561. if (!db.IsNull()) db.Close();
  562. }
  563. return result;
  564. }
  565. /// <summary>
  566. /// 获取分页数据
  567. /// </summary>
  568. /// <param name="entity"></param>
  569. /// <param name="enty"></param>
  570. /// <returns></returns>
  571. //private ResponseTable GetPageRecordDtEnd(string showfield, int startNum, int pageSize)
  572. public static ResponseModel GetPageRecordDtEnd(this object entity, RequestModel enty)
  573. {
  574. DataAccess db = enty.db; QueryCommand cmd = new QueryCommand();
  575. ResponseModel result = new ResponseModel();
  576. try
  577. {
  578. System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
  579. sw.Start();
  580. var typeDescriptor = TypeDescriptor.ParserMeta(entity);//获取实体的元数据
  581. if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(typeDescriptor.ModuleName, DataConfigEnum.WriteData);//创建数据库连接
  582. if (db.IsNull())
  583. {
  584. result.IsSuccess = false;
  585. result.Message = "数据库配置不正确";
  586. return result;
  587. }
  588. if (enty.newSt.IsNull())
  589. {
  590. result.IsSuccess = false;
  591. result.Message = "备注信息不能为空";
  592. return result;
  593. }
  594. else
  595. {
  596. if (enty.newSt.NewSt.IsNull())
  597. {
  598. result.IsSuccess = false;
  599. result.Message = "备注信息不能为空";
  600. return result;
  601. }
  602. }
  603. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句
  604. qcBuilder.TypeDes = typeDescriptor;//实体属性
  605. qcBuilder.PersistType = EntityPersistType.QueryPage;//操作方式
  606. qcBuilder.PageNo = enty.StartNum;
  607. qcBuilder.PageSize = enty.PageSize;
  608. //qcBuilder.SelectField = enty.SelectField;
  609. qcBuilder.ShowField = enty.ShowField;
  610. cmd = qcBuilder.GetQueryCommand();
  611. System.Diagnostics.StackFrame[] sfs = enty.newSt.NewSt.GetFrames();
  612. string sqlWithComment = string.Empty;
  613. if (sfs.Count() > 0)
  614. {
  615. System.Diagnostics.StackFrame infos = sfs[0];
  616. System.Reflection.MethodBase mb = infos.GetMethod();
  617. var filename = infos.GetFileName();
  618. sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", enty.newSt.Author, enty.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName);
  619. }
  620. DataTable dt = db.ExecuteDataTable(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters);
  621. sw.Stop();
  622. string str = sw.Elapsed.ToString();
  623. result.IsSuccess = dt.Rows.Count > 0;
  624. result.RecordNum = PageSumEnd(typeDescriptor, db, sqlWithComment).RecordNum;
  625. result.DataTable = dt;
  626. result.Message = "查询返回成功,用时:" + str;
  627. return result;
  628. }
  629. catch (Exception ex)
  630. {
  631. //LogHelper.WriteExLog(ex);
  632. result.IsSuccess = false;
  633. result.Message = ex.ToString();
  634. return result;
  635. }
  636. finally
  637. {
  638. result.StrSql = cmd.SqlString;
  639. result.DBConfig = db.ConnectionString;
  640. if (!db.IsNull()) db.Close();
  641. }
  642. }
  643. #region 分页查询
  644. /// <summary>
  645. /// 分页查询startNum开始记录,pageSize几条记录进行分页
  646. /// </summary>
  647. /// <typeparam name="T"></typeparam>
  648. /// <param name="entity">所有参数及查询条件</param>
  649. /// <param name="pageSize">页数</param>
  650. /// <param name="startNum">开始记录</param>
  651. /// <returns>返回查询的记录</returns>
  652. public static DataTable GetPageDataTable(object entity, int startNum, int pageSize)
  653. {
  654. DataTable dt = new DataTable(); DataAccess db = null; SqlCmd = new Dictionary<string, QueryParameterCollection>();
  655. try
  656. {
  657. if (entity != null)
  658. {
  659. QueryCommandBuilders querycommd = new QueryCommandBuilders();
  660. MetaData md = MetaDataManager.GetMetaData(entity);//获取实体的元数据
  661. if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
  662. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//构建生成哪种SQL语句
  663. qcBuilder.Md = md;
  664. qcBuilder.PersistType = EntityPersistType.QueryPage;
  665. qcBuilder.PageNo = startNum;
  666. qcBuilder.PageSize = pageSize;
  667. QueryCommand cmd = qcBuilder.GetQueryCommand();
  668. querycommd.Add(qcBuilder);
  669. SqlCmd.Add(cmd.CommandText, cmd.Parameters);
  670. dt = db.ExecuteDataTable(cmd.CommandText, cmd.Parameters);
  671. }
  672. }
  673. catch (Exception ex)
  674. {
  675. }
  676. finally
  677. {
  678. if (!db.IsNull()) db.Close();
  679. }
  680. return dt;
  681. }
  682. /// <summary>
  683. /// 分页查询startNum开始记录,pageSize几条记录进行分页
  684. /// </summary>
  685. /// <typeparam name="T"></typeparam>
  686. /// <param name="entity">所有参数及查询条件</param>
  687. /// <param name="pageSize">页数</param>
  688. /// <param name="startNum">开始记录</param>
  689. /// <returns>返回查询的记录</returns>
  690. public static DataSet GetPageDataSet(object entity, int startNum, int pageSize)
  691. {
  692. DataAccess db = null; SqlCmd = new Dictionary<string, QueryParameterCollection>();
  693. try
  694. {
  695. if (entity != null)
  696. {
  697. QueryCommandBuilders querycommd = new QueryCommandBuilders();
  698. MetaData md = MetaDataManager.GetMetaData(entity);//获取实体的元数据
  699. if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
  700. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//构建生成哪种SQL语句
  701. qcBuilder.Md = md;
  702. qcBuilder.PersistType = EntityPersistType.QueryPage;
  703. qcBuilder.PageNo = startNum;
  704. qcBuilder.PageSize = pageSize;
  705. QueryCommand cmd = qcBuilder.GetQueryCommand();
  706. querycommd.Add(qcBuilder);
  707. SqlCmd.Add(cmd.CommandText, cmd.Parameters);
  708. return db.ExecuteDataSet(cmd.CommandText, cmd.Parameters);
  709. }
  710. else
  711. return new DataSet();
  712. }
  713. catch (Exception ex)
  714. {
  715. return new DataSet();
  716. }
  717. finally
  718. {
  719. if (!db.IsNull()) db.Close();
  720. }
  721. }
  722. /// <summary>
  723. /// 分页查询startNum开始记录,pageSize几条记录进行分页
  724. /// </summary>
  725. /// <typeparam name="T"></typeparam>
  726. /// <param name="entity">所有参数及查询条件</param>
  727. /// <param name="pageSize">页数</param>
  728. /// <param name="startNum">开始记录</param>
  729. /// <returns>返回查询的记录</returns>
  730. public static List<T> GetPageList<T>(object entity, int startNum, int pageSize) where T : EntityBase, new()
  731. {
  732. List<T> objlist = new List<T>(); DataAccess db = null; SqlCmd = new Dictionary<string, QueryParameterCollection>();
  733. try
  734. {
  735. QueryCommandBuilders querycommd = new QueryCommandBuilders();
  736. MetaData md = new MetaData();
  737. if (entity != null)
  738. {
  739. md = MetaDataManager.GetMetaData(entity);//获取实体的元数据
  740. if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
  741. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//构建生成哪种SQL语句
  742. qcBuilder.Md = md;
  743. qcBuilder.PersistType = EntityPersistType.QueryPage;
  744. qcBuilder.PageNo = startNum;
  745. qcBuilder.PageSize = pageSize;
  746. QueryCommand cmd = qcBuilder.GetQueryCommand();
  747. querycommd.Add(qcBuilder);
  748. SqlCmd.Add(cmd.CommandText, cmd.Parameters);
  749. DataTable dt = db.ExecuteDataTable(cmd.CommandText, cmd.Parameters);
  750. if (!object.Equals(dt, null)) objlist = DataToModel.Dt2EnList<T>(dt);
  751. }
  752. }
  753. catch (Exception ex)
  754. {
  755. }
  756. finally
  757. {
  758. if (!db.IsNull()) db.Close();
  759. }
  760. return objlist;
  761. }
  762. #endregion
  763. #region 统计表记录
  764. /// <summary>
  765. /// 数据的总记录
  766. /// </summary>
  767. /// <returns></returns>
  768. public static ResponseModel SumDesc(this object entity, RequestModel request)
  769. {
  770. DataAccess db = null; ResponseModel result = new ResponseModel(); QueryCommand cmd = new QueryCommand(); string sqlWithComment = string.Empty;
  771. try
  772. {
  773. var typeDescriptor = TypeDescriptor.ParserMeta(entity);//获取实体的元数据
  774. if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(typeDescriptor.ModuleName, DataConfigEnum.WriteData);//创建数据库连接
  775. if (db.IsNull())
  776. {
  777. result.IsSuccess = false;
  778. result.Message = "数据库配置不正确";
  779. return result;
  780. }
  781. if (request.newSt.IsNull())
  782. {
  783. result.IsSuccess = false;
  784. result.Message = "备注信息不能为空";
  785. return result;
  786. }
  787. else
  788. {
  789. if (request.newSt.NewSt.IsNull())
  790. {
  791. result.IsSuccess = false;
  792. result.Message = "备注信息不能为空";
  793. return result;
  794. }
  795. }
  796. System.Diagnostics.StackFrame[] sfs = request.newSt.NewSt.GetFrames();
  797. if (sfs.Count() > 0)
  798. {
  799. System.Diagnostics.StackFrame infos = sfs[0];
  800. System.Reflection.MethodBase mb = infos.GetMethod();
  801. var filename = infos.GetFileName();
  802. sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", request.newSt.Author, request.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName);
  803. }
  804. return PageSumEnd(typeDescriptor, db, sqlWithComment);
  805. }
  806. catch (Exception ex)
  807. {
  808. //LogHelper.WriteExLog(ex);
  809. result.IsSuccess = false;
  810. result.Message = ex.ToString();
  811. }
  812. finally
  813. {
  814. result.StrSql = cmd.SqlString;
  815. result.DBConfig = db.ConnectionString;
  816. if (!db.IsNull()) db.Close();
  817. }
  818. return result;
  819. }
  820. /// <summary>
  821. /// 统计表记录
  822. /// </summary>
  823. /// <typeparam name="T">实体类型</typeparam>
  824. /// <returns></returns>
  825. public static int Sum(this object entity)
  826. {
  827. DataAccess db = null; SqlCmd = new Dictionary<string, QueryParameterCollection>();
  828. try
  829. {
  830. if (entity != null)
  831. {
  832. QueryCommandBuilders querycommd = new QueryCommandBuilders();
  833. var typeDescriptor = TypeDescriptor.ParserMeta(entity);//获取实体的元数据
  834. if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(typeDescriptor.ModuleName);//创建数据库连接
  835. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//构建生成哪种SQL语句
  836. qcBuilder.TypeDes = typeDescriptor;
  837. qcBuilder.PersistType = EntityPersistType.Sum;
  838. QueryCommand cmd = qcBuilder.GetQueryCommand();
  839. SqlCmd.Add(cmd.CommandText, cmd.Parameters);
  840. return Convert.ToInt32(db.ExecuteScalar(cmd.CommandText, cmd.Parameters));
  841. }
  842. else
  843. return 0;
  844. }
  845. catch (Exception ex)
  846. {
  847. throw ex;
  848. }
  849. finally
  850. {
  851. if (!db.IsNull()) db.Close();
  852. }
  853. }
  854. #endregion
  855. #endregion
  856. #region 查询SELECT方法
  857. #region GetDataReaderList方法
  858. /// <summary>
  859. /// 由DataReader转DataTable
  860. /// </summary>
  861. /// <param name="entity"></param>
  862. /// <param name="request"></param>
  863. /// <returns></returns>
  864. public static ResponseModel GetDr2DtListEnd(this object entity, RequestModel request)
  865. {
  866. var result = new ResponseModel(); DataAccess db = request.db; QueryCommand cmd = new QueryCommand(); string sqlWithComment = string.Empty;
  867. try
  868. {
  869. System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
  870. sw.Start();
  871. TypeDescriptor md = TypeDescriptor.ParserMeta(entity);//获取实体的元数据
  872. if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
  873. if (db.IsNull())
  874. {
  875. result.IsSuccess = false;
  876. result.Message = "数据库配置不正确";
  877. return result;
  878. }
  879. if (request.newSt.IsNull())
  880. {
  881. result.IsSuccess = false;
  882. result.Message = "备注信息不能为空";
  883. return result;
  884. }
  885. else
  886. {
  887. if (request.newSt.NewSt.IsNull())
  888. {
  889. result.IsSuccess = false;
  890. result.Message = "备注信息不能为空";
  891. return result;
  892. }
  893. }
  894. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句
  895. qcBuilder.TypeDes = md;
  896. //qcBuilder.SelectField = enty.SelectField;
  897. qcBuilder.ShowField = request.ShowField;
  898. if (request.TopNum > 0)
  899. qcBuilder.Top = request.TopNum.ToString();
  900. qcBuilder.PersistType = EntityPersistType.Query;//操作方式
  901. cmd = qcBuilder.GetQueryCommand();
  902. DataTable dt = new DataTable();
  903. //dt = db.ExecuteDataTable(cmd.CommandText, cmd.Parameters);
  904. //sw.Stop();
  905. //string str = sw.Elapsed.ToString();
  906. System.Diagnostics.StackFrame[] sfs = request.newSt.NewSt.GetFrames();
  907. if (sfs.Count() > 0)
  908. {
  909. System.Diagnostics.StackFrame infos = sfs[0];
  910. System.Reflection.MethodBase mb = infos.GetMethod();
  911. var filename = infos.GetFileName();
  912. sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", request.newSt.Author, request.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName);
  913. }
  914. using (IDataReader rdr = db.ExecuteDataReader(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters))
  915. {
  916. dt = DataToModel.Dr2Dt(rdr);
  917. }
  918. sw.Stop();
  919. string str = sw.Elapsed.ToString();
  920. result.IsSuccess = dt.IsHaveRows();
  921. result.DataTable = dt;
  922. result.Message = string.Format("返回数据成功记录数:{0}耗时:{1}", dt.Rows.Count, str);
  923. return result;
  924. }
  925. catch (Exception ex)
  926. {
  927. //LogHelper.WriteExLog(ex);
  928. result.IsSuccess = false;
  929. result.Message = ex.ToString();
  930. return result;
  931. }
  932. finally
  933. {
  934. string showsqlstr = string.Format(@"{0}{1}", cmd.SqlString, sqlWithComment);
  935. result.StrSql = showsqlstr;
  936. result.DBConfig = db.ConnectionString;
  937. if (!db.IsNull()) db.Close();
  938. }
  939. return result;
  940. }
  941. /// <summary>
  942. /// 通过DataReader返回List集合这种效率高
  943. /// </summary>
  944. /// <param name="entity">显示字段</param>
  945. /// <param name="request">数据对象</param>
  946. /// <returns>返回Object类型的数据</returns>
  947. public static ResponseModel GetDr2EnListEnd<T>(this object entity, RequestModel request)
  948. {
  949. var result = new ResponseModel(); DataAccess db = request.db; QueryCommand cmd = new QueryCommand();
  950. try
  951. {
  952. System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
  953. sw.Start();
  954. TypeDescriptor md = TypeDescriptor.ParserMeta(entity);//获取实体的元数据
  955. if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
  956. if (db.IsNull())
  957. {
  958. result.IsSuccess = false;
  959. result.Message = "数据库配置不正确";
  960. return result;
  961. }
  962. if (request.newSt.IsNull())
  963. {
  964. result.IsSuccess = false;
  965. result.Message = "备注信息不能为空";
  966. return result;
  967. }
  968. else
  969. {
  970. if (request.newSt.NewSt.IsNull())
  971. {
  972. result.IsSuccess = false;
  973. result.Message = "备注信息不能为空";
  974. return result;
  975. }
  976. }
  977. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);////构建生成哪种SQL语句
  978. qcBuilder.TypeDes = md;
  979. qcBuilder.ShowField = request.ShowField;
  980. if (request.TopNum > 0)
  981. qcBuilder.Top = request.TopNum.ToString();
  982. qcBuilder.PersistType = EntityPersistType.Query;//操作方式
  983. cmd = qcBuilder.GetQueryCommand();
  984. List<T> objlist = new List<T>();
  985. System.Diagnostics.StackFrame[] sfs = request.newSt.NewSt.GetFrames();
  986. string sqlWithComment = string.Empty;
  987. if (sfs.Count() > 0)
  988. {
  989. System.Diagnostics.StackFrame infos = sfs[0];
  990. System.Reflection.MethodBase mb = infos.GetMethod();
  991. var filename = infos.GetFileName();
  992. sqlWithComment = string.Format(ConstSql.SQL_WITH_COMMENT, "ORM框架", request.newSt.Author, request.newSt.SqlDesc, filename, mb.Name, mb.DeclaringType.FullName);
  993. }
  994. using (IDataReader rdr = db.ExecuteDataReader(string.Format(@"{0}{1}", cmd.CommandText, sqlWithComment), cmd.Parameters))
  995. {
  996. objlist = DataToModel.Dr2EnList<T>(rdr);
  997. }
  998. sw.Stop();
  999. string str = sw.Elapsed.ToString();
  1000. result.IsSuccess = objlist.Count > 0;
  1001. if (result.IsSuccess)
  1002. {
  1003. result.ResultModel = objlist;
  1004. result.Message = string.Format("返回数据成功记录数:{0}耗时:{1}", objlist.Count, str);
  1005. }
  1006. else
  1007. {
  1008. result.Message = "返回失败";
  1009. result.StrSql = cmd.SqlString;
  1010. }
  1011. return result;
  1012. }
  1013. catch (Exception ex)
  1014. {
  1015. //LogHelper.WriteExLog(ex);
  1016. result.IsSuccess = false;
  1017. result.Message = ex.ToString();
  1018. return result;
  1019. }
  1020. finally
  1021. {
  1022. result.DBConfig = db.ConnectionString;
  1023. if (!db.IsNull()) db.Close();
  1024. }
  1025. }
  1026. /// <summary>
  1027. /// 通过DataReader返回List集合这种效率高
  1028. /// </summary>
  1029. /// <typeparam name="T">实体</typeparam>
  1030. /// <param name="entity">查询条件</param>
  1031. /// <returns>返回Object类型的数据</returns>
  1032. public static object GetDataReaderList(this object entity)
  1033. {
  1034. DataAccess db = null; SqlCmd = new Dictionary<string, QueryParameterCollection>();
  1035. try
  1036. {
  1037. if (entity != null)
  1038. {
  1039. QueryCommandBuilders querycommd = new QueryCommandBuilders();
  1040. MetaData md = MetaDataManager.GetMetaData(entity);//获取实体的元数据
  1041. if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
  1042. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//构建生成哪种SQL语句
  1043. qcBuilder.Md = md;
  1044. qcBuilder.PersistType = EntityPersistType.Query;//操作方式
  1045. QueryCommand cmd = qcBuilder.GetQueryCommand();
  1046. querycommd.Add(qcBuilder);
  1047. object objlist = new object();
  1048. SqlCmd.Add(cmd.CommandText, cmd.Parameters);
  1049. using (IDataReader rdr = db.ExecuteDataReader(cmd.CommandText, cmd.Parameters))
  1050. {
  1051. objlist = DataToModel.Dr2EnList(rdr, entity);
  1052. }
  1053. return objlist;
  1054. }
  1055. else
  1056. return null;
  1057. }
  1058. catch (Exception ex)
  1059. {
  1060. return null;
  1061. }
  1062. finally
  1063. {
  1064. if (!db.IsNull()) db.Close();
  1065. }
  1066. }
  1067. /// <summary>
  1068. /// 通过DataReader返回List集合这种效率高
  1069. /// </summary>
  1070. /// <typeparam name="T">实体</typeparam>
  1071. /// <param name="entity">查询条件</param>
  1072. /// <returns>返回的实体本身的数据</returns>
  1073. public static object GetDataReaderList<T>(object entity)
  1074. {
  1075. DataAccess db = null; SqlCmd = new Dictionary<string, QueryParameterCollection>();
  1076. try
  1077. {
  1078. if (entity != null)
  1079. {
  1080. QueryCommandBuilders querycommd = new QueryCommandBuilders();
  1081. MetaData md = MetaDataManager.GetMetaData(entity);//获取实体的元数据
  1082. if (db.IsNull()) db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
  1083. QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//构建生成哪种SQL语句
  1084. qcBuilder.Md = md;
  1085. qcBuilder.PersistType = EntityPersistType.Query;//操作方式
  1086. QueryCommand cmd = qcBuilder.GetQueryCommand();
  1087. querycommd.Add(qcBuilder);
  1088. List<T> objt = new List<T>(); List<object> obj = new List<object>();
  1089. SqlCmd.Add(cmd.CommandText, cmd.Parameters);
  1090. using (IDataReader rdr = db.ExecuteDataReader(cmd.CommandText, cmd.Parameters))
  1091. {
  1092. objt = DataToModel.Dr2EnList<T>(rdr);
  1093. }
  1094. return objt;
  1095. }
  1096. else
  1097. return null;
  1098. }
  1099. catch (Exception ex)
  1100. {
  1101. return null;
  1102. }
  1103. finally
  1104. {
  1105. if (!db.IsNull()) db.Close();
  1106. }
  1107. }
  1108. #endregion
  1109. #endregion
  1110. #endregion
  1111. /// <summary>
  1112. /// 获取是否存在的SQL
  1113. /// </summary>
  1114. /// <returns></returns>
  1115. public static string GetExistsSql()
  1116. {
  1117. return "IF EXISTS (SELECT 1 FROM {0} WHERE {1}) SELECT 1 ELSE SELECT 0";
  1118. }
  1119. #region 执行SQL和存储过程
  1120. public static bool Exists(string strSql)
  1121. {
  1122. DataAccess db = DataAccessFactory.GetWriteDataDefault;
  1123. object obj = db.ExecuteScalar(strSql);
  1124. int cmdresult;
  1125. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  1126. {
  1127. cmdresult = 0;
  1128. }
  1129. else
  1130. {
  1131. cmdresult = int.Parse(obj.ToString());
  1132. }
  1133. if (cmdresult == 0)
  1134. {
  1135. return false;
  1136. }
  1137. else
  1138. {
  1139. return true;
  1140. }
  1141. }
  1142. /// <summary>
  1143. ///
  1144. /// </summary>
  1145. /// <param name="strSql"></param>
  1146. /// <returns></returns>
  1147. public static bool ExecuteSql(string strSql)
  1148. {
  1149. DataAccess db = DataAccessFactory.GetWriteDataDefault;
  1150. object obj = db.ExecuteScalar(strSql);
  1151. int cmdresult;
  1152. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  1153. {
  1154. cmdresult = 0;
  1155. }
  1156. else
  1157. {
  1158. cmdresult = int.Parse(obj.ToString());
  1159. }
  1160. if (cmdresult == 0)
  1161. {
  1162. return false;
  1163. }
  1164. else
  1165. {
  1166. return true;
  1167. }
  1168. }
  1169. /// <summary>
  1170. /// 执行SQL语句,返回影响的记录数
  1171. /// </summary>
  1172. /// <param name="SQLString">SQL语句</param>
  1173. /// <returns>影响的记录数</returns>
  1174. public static int ExecuteSql(string SQLString, DataAccess db)
  1175. {
  1176. int rows = db.ExecuteNonQuery(SQLString);
  1177. return rows;
  1178. }
  1179. /// <summary>
  1180. /// 通过此方法可以执行存储过程
  1181. /// </summary>
  1182. /// <param name="commtext">存储过程</param>
  1183. /// <param name="entity">参数</param>
  1184. /// <returns></returns>
  1185. public static bool Execomm(string commtext, object entity)
  1186. {
  1187. DataAccess db = DataAccessFactory.GetWriteDataDefault;
  1188. try
  1189. {
  1190. MetaData md = MetaDataManager.GetMetaData(entity);//获取实体的元数据
  1191. MSSqlQueryCommandBuilder qcBuilder = new MSSqlQueryCommandBuilder(); ;//Ant.ORM
  1192. qcBuilder.EntityType = md.FiledMeta.EntityType;//实体类型
  1193. qcBuilder.PersistType = EntityPersistType.eNonDelete;//操作类型
  1194. qcBuilder.Fields = MetaDataManager.GetEntityFields(entity);
  1195. //注:需要修改
  1196. QueryCommand cmd = qcBuilder.GetQueryCommand();//转成SQL语句
  1197. SqlCmd.Add(cmd.CommandText, cmd.Parameters);
  1198. return db.ExecuteNonQuery(commtext, CommandType.StoredProcedure, cmd.Parameters) > 0;
  1199. //DAO.ExecuteSql(cmd.CommandText);
  1200. }
  1201. catch (Exception ex)
  1202. {
  1203. return false;
  1204. }
  1205. finally
  1206. {
  1207. if (!db.IsNull()) db.Close();
  1208. }
  1209. }
  1210. #endregion
  1211. /// <summary>
  1212. /// Object转换成实体
  1213. /// </summary>
  1214. /// <typeparam name="T"></typeparam>
  1215. /// <param name="obj"></param>
  1216. /// <returns></returns>
  1217. public static List<T> ObjListToEnList<T>(object obj)
  1218. {
  1219. List<T> ListEnty = new List<T>();
  1220. if (!object.Equals(obj, null))
  1221. {
  1222. List<object> listmod = (List<object>)obj;
  1223. foreach (object mod in listmod)
  1224. {
  1225. T enty = (T)mod;
  1226. ListEnty.Add(enty);
  1227. }
  1228. return ListEnty;
  1229. }
  1230. else
  1231. return null;
  1232. }
  1233. /// <summary>
  1234. /// 将dt转化成Json数据将dt转化成Json数据 格式如 table[{id:1,title:'体育'},id:2,title:'娱乐'}]
  1235. /// </summary>
  1236. /// <param name="dt"></param>
  1237. /// <param name="fromCount">序号的初始值</param>
  1238. /// <param name="totalCountStr">表记录名称</param>
  1239. /// <param name="tbname">表名称</param>
  1240. /// <returns></returns>
  1241. public static string DataTable2JSON(DataTable dt, int fromCount, string totalCountStr, string tbname)
  1242. {
  1243. StringBuilder jsonBuilder = new StringBuilder();
  1244. jsonBuilder.Append(totalCountStr + ":" + dt.Rows.Count + "," + tbname + ": [");
  1245. for (int i = 0; i < dt.Rows.Count; i++)
  1246. {
  1247. if (i > 0)
  1248. jsonBuilder.Append(",");
  1249. jsonBuilder.Append("{");
  1250. jsonBuilder.Append("no:" + (fromCount + i + 1) + ",");
  1251. for (int j = 0; j < dt.Columns.Count; j++)
  1252. {
  1253. if (j > 0)
  1254. jsonBuilder.Append(",");
  1255. jsonBuilder.Append(dt.Columns[j].ColumnName.ToLower() + ": '" + dt.Rows[i][j].ToString().Replace("\\", "\\\\").Replace("\'", "\\\'").Replace("\t", " ").Replace("\r", " ").Replace("\n", "<br/>") + "'");
  1256. }
  1257. jsonBuilder.Append("}");
  1258. }
  1259. jsonBuilder.Append("]");
  1260. return jsonBuilder.ToString();
  1261. }
  1262. /// <summary>
  1263. /// 查询条件表达式
  1264. /// </summary>
  1265. /// <param name="type"></param>
  1266. /// <param name="filter"></param>
  1267. /// <returns></returns>
  1268. private static string ModiFilter(Type type, string strwhere)
  1269. {
  1270. string tmpFilter = strwhere;
  1271. if (!tmpFilter.StartsWith(" "))
  1272. tmpFilter = " " + tmpFilter;
  1273. MetaData md = new MetaData();
  1274. md.FiledMeta = MetaDataManager.GetMetaData(type);//获取实体的元数据
  1275. foreach (string s in md.FiledMeta.FieldMeteDatas.Keys)
  1276. {
  1277. string pattern = new StringBuilder(@"\s").Append(s).Append(@"[\s|+|-|*|/|=|&|\^|!|>|<|~|(|)]").ToString();
  1278. if (Regex.IsMatch(tmpFilter, pattern))
  1279. {
  1280. MatchCollection matches = Regex.Matches(tmpFilter, pattern);
  1281. foreach (Match match in matches)
  1282. {
  1283. tmpFilter = Regex.Replace(tmpFilter, match.Value, match.Value.Replace(s, md.FiledMeta.FieldMeteDatas[s].ColumnName));
  1284. }
  1285. }
  1286. }
  1287. return tmpFilter;
  1288. }
  1289. /// <summary>
  1290. /// 查询条件表达式
  1291. /// </summary>
  1292. /// <param name="type"></param>
  1293. /// <param name="oid">主键值</param>
  1294. /// <returns></returns>
  1295. private static string ModPerkey(string oid, string value)
  1296. {
  1297. string tmpFilter = value;
  1298. if (!string.IsNullOrEmpty(tmpFilter))
  1299. tmpFilter = oid + "='" + tmpFilter + "'";
  1300. return tmpFilter;
  1301. }
  1302. }
  1303. }