DataBaseTableService.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. using LeaRun.Application.Entity.SystemManage;
  2. using LeaRun.Application.IService.SystemManage;
  3. using LeaRun.Data;
  4. using LeaRun.Data.Repository;
  5. using LeaRun.Util.WebControl;
  6. using System.Collections.Generic;
  7. using System.Data;
  8. using System.Data.Common;
  9. using System.Text;
  10. namespace LeaRun.Application.Service.SystemManage
  11. {
  12. /// <summary>
  13. /// 版 本 6.1
  14. /// Copyright (c) 2013-2016 上海力软信息技术有限公司
  15. /// 创建人:佘赐雄
  16. /// 日 期:2015.11.18 11:02
  17. /// 描 述:数据库管理(支持:SqlServer)
  18. /// </summary>
  19. public class DataBaseTableService : RepositoryFactory, IDataBaseTableService
  20. {
  21. private IDataBaseLinkService dataBaseLinkService = new DataBaseLinkService();
  22. #region 获取数据
  23. /// <summary>
  24. /// 数据表列表
  25. /// </summary>
  26. /// <param name="dataBaseLinkId">库连接Id</param>
  27. /// <param name="tableName">表明</param>
  28. /// <returns></returns>
  29. public DataTable GetTableList(string dataBaseLinkId, string tableName)
  30. {
  31. DataBaseLinkEntity dataBaseLinkEntity = dataBaseLinkService.GetEntity(dataBaseLinkId);
  32. if (dataBaseLinkEntity != null)
  33. {
  34. StringBuilder strSql = new StringBuilder();
  35. strSql.Append(@"DECLARE @TableInfo TABLE ( name VARCHAR(50) , sumrows VARCHAR(11) , reserved VARCHAR(50) , data VARCHAR(50) , index_size VARCHAR(50) , unused VARCHAR(50) , pk VARCHAR(50) )
  36. DECLARE @TableName TABLE ( name VARCHAR(50) )
  37. DECLARE @name VARCHAR(50)
  38. DECLARE @pk VARCHAR(50)
  39. INSERT INTO @TableName ( name ) SELECT o.name FROM sysobjects o , sysindexes i WHERE o.id = i.id AND o.Xtype = 'U' AND i.indid < 2 ORDER BY i.rows DESC , o.name
  40. WHILE EXISTS ( SELECT 1 FROM @TableName ) BEGIN SELECT TOP 1 @name = name FROM @TableName DELETE @TableName WHERE name = @name DECLARE @objectid INT SET @objectid = OBJECT_ID(@name) SELECT @pk = COL_NAME(@objectid, colid) FROM sysobjects AS o INNER JOIN sysindexes AS i ON i.name = o.name INNER JOIN sysindexkeys AS k ON k.indid = i.indid WHERE o.xtype = 'PK' AND parent_obj = @objectid AND k.id = @objectid INSERT INTO @TableInfo ( name , sumrows , reserved , data , index_size , unused ) EXEC sys.sp_spaceused @name UPDATE @TableInfo SET pk = @pk WHERE name = @name END
  41. SELECT F.name , F.reserved , F.data , F.index_size , RTRIM(F.sumrows) AS sumrows , F.unused , ISNULL(p.tdescription, f.name) AS tdescription , F.pk
  42. FROM @TableInfo F LEFT JOIN ( SELECT name = CASE WHEN A.COLORDER = 1 THEN D.NAME ELSE '' END , tdescription = CASE WHEN A.COLORDER = 1 THEN ISNULL(F.VALUE, '') ELSE '' END FROM SYSCOLUMNS A LEFT JOIN SYSTYPES B ON A.XUSERTYPE = B.XUSERTYPE INNER JOIN SYSOBJECTS D ON A.ID = D.ID AND D.XTYPE = 'U' AND D.NAME <> 'DTPROPERTIES' LEFT JOIN sys.extended_properties F ON D.ID = F.major_id WHERE a.COLORDER = 1 AND F.minor_id = 0 ) P ON F.name = p.name
  43. WHERE 1 = 1 ");
  44. if (!string.IsNullOrEmpty(tableName))
  45. {
  46. strSql.Append(" AND f.name='" + tableName + "'");
  47. }
  48. strSql.Append(" ORDER BY f.name");
  49. return this.BaseRepository(dataBaseLinkEntity.DbConnection).FindTable(strSql.ToString());
  50. }
  51. return null;
  52. }
  53. /// <summary>
  54. /// 数据表字段列表
  55. /// </summary>
  56. /// <param name="dataBaseLinkId">库连接Id</param>
  57. /// <param name="tableName">表明</param>
  58. /// <returns></returns>
  59. public IEnumerable<DataBaseTableFieldEntity> GetTableFiledList(string dataBaseLinkId, string tableName)
  60. {
  61. DataBaseLinkEntity dataBaseLinkEntity = dataBaseLinkService.GetEntity(dataBaseLinkId);
  62. if (dataBaseLinkEntity != null)
  63. {
  64. StringBuilder strSql = new StringBuilder();
  65. strSql.Append(@"SELECT [number] = a.colorder , [column] = a.name , [datatype] = b.name , [length] = COLUMNPROPERTY(a.id, a.name, 'PRECISION') , [identity] = CASE WHEN COLUMNPROPERTY(a.id, a.name, 'IsIdentity') = 1 THEN '1' ELSE '' END , [key] = CASE WHEN EXISTS ( SELECT 1 FROM sysobjects WHERE xtype = 'PK' AND parent_obj = a.id AND name IN ( SELECT name FROM sysindexes WHERE indid IN ( SELECT indid FROM sysindexkeys WHERE id = a.id AND colid = a.colid ) ) ) THEN '1' ELSE '' END , [isnullable] = CASE WHEN a.isnullable = 1 THEN '1' ELSE '' END , [defaults] = ISNULL(e.text, '') , [remark] = ISNULL(g.[value], a.name)
  66. FROM syscolumns a LEFT JOIN systypes b ON a.xusertype = b.xusertype INNER JOIN sysobjects d ON a.id = d.id AND d.xtype = 'U' AND d.name <> 'dtproperties' LEFT JOIN syscomments e ON a.cdefault = e.id LEFT JOIN sys.extended_properties g ON a.id = g.major_id AND a.colid = g.minor_id LEFT JOIN sys.extended_properties f ON d.id = f.major_id AND f.minor_id = 0
  67. WHERE d.name = @tableName
  68. ORDER BY a.id , a.colorder");
  69. DbParameter[] parameter =
  70. {
  71. DbParameters.CreateDbParameter("@tableName",tableName)
  72. };
  73. return this.BaseRepository(dataBaseLinkEntity.DbConnection).FindList<DataBaseTableFieldEntity>(strSql.ToString(), parameter);
  74. }
  75. return null;
  76. }
  77. /// <summary>
  78. /// 数据库表数据列表
  79. /// </summary>
  80. /// <param name="dataBaseLinkId">库连接</param>
  81. /// <param name="tableName">表明</param>
  82. /// <param name="switchWhere">条件</param>
  83. /// <param name="logic">逻辑</param>
  84. /// <param name="keyword">关键字</param>
  85. /// <param name="pagination">分页参数</param>
  86. /// <returns></returns>
  87. public DataTable GetTableDataList(string dataBaseLinkId, string tableName, string switchWhere, string logic, string keyword, Pagination pagination)
  88. {
  89. DataBaseLinkEntity dataBaseLinkEntity = dataBaseLinkService.GetEntity(dataBaseLinkId);
  90. if (dataBaseLinkEntity != null)
  91. {
  92. StringBuilder strSql = new StringBuilder();
  93. List<DbParameter> parameter = new List<DbParameter>();
  94. strSql.Append("SELECT * FROM " + tableName + " WHERE 1=1");
  95. if (!string.IsNullOrEmpty(keyword))
  96. {
  97. strSql.Append(" AND " + switchWhere + "");
  98. switch (logic)
  99. {
  100. case "Equal": //等于
  101. strSql.Append(" = ");
  102. parameter.Add(DbParameters.CreateDbParameter("@" + switchWhere, keyword));
  103. break;
  104. case "NotEqual": //不等于
  105. strSql.Append(" <> ");
  106. parameter.Add(DbParameters.CreateDbParameter("@" + switchWhere, keyword));
  107. break;
  108. case "Greater": //大于
  109. strSql.Append(" > ");
  110. parameter.Add(DbParameters.CreateDbParameter("@" + switchWhere, keyword));
  111. break;
  112. case "GreaterThan": //大于等于
  113. strSql.Append(" >= ");
  114. parameter.Add(DbParameters.CreateDbParameter("@" + switchWhere, keyword));
  115. break;
  116. case "Less": //小于
  117. strSql.Append(" < ");
  118. parameter.Add(DbParameters.CreateDbParameter("@" + switchWhere, keyword));
  119. break;
  120. case "LessThan": //小于等于
  121. strSql.Append(" >= ");
  122. parameter.Add(DbParameters.CreateDbParameter("@" + switchWhere, keyword));
  123. break;
  124. case "Null": //为空
  125. strSql.Append(" is null ");
  126. parameter.Add(DbParameters.CreateDbParameter("@" + switchWhere, keyword));
  127. break;
  128. case "NotNull": //不为空
  129. strSql.Append(" is not null ");
  130. parameter.Add(DbParameters.CreateDbParameter("@" + switchWhere, keyword));
  131. break;
  132. case "Like": //包含
  133. strSql.Append(" like ");
  134. parameter.Add(DbParameters.CreateDbParameter("@" + switchWhere, '%' + keyword + '%'));
  135. break;
  136. default:
  137. break;
  138. }
  139. strSql.Append("@" + switchWhere + "");
  140. }
  141. return this.BaseRepository(dataBaseLinkEntity.DbConnection).FindTable(strSql.ToString(), parameter.ToArray(), pagination);
  142. }
  143. return null;
  144. }
  145. #endregion
  146. #region 提交数据
  147. /// <summary>
  148. /// 保存数据库表表单(新增、修改)
  149. /// </summary>
  150. /// <param name="dataBaseLinkId">库连接Id</param>
  151. /// <param name="tableName">表名称</param>
  152. /// <param name="tableDescription">表说明</param>
  153. /// <param name="fieldList">字段列表</param>
  154. public void SaveForm(string dataBaseLinkId, string tableName, string tableDescription, IEnumerable<DataBaseTableFieldEntity> fieldList)
  155. {
  156. //StringBuilder strSql = new StringBuilder();
  157. //strSql.Append("if exists (select 1");
  158. //strSql.Append(" from sysobjects");
  159. //strSql.Append(" where id = object_id('" + tableName + "')");
  160. //strSql.Append(" and type = 'U')");
  161. //strSql.Append(" drop table " + tableName + "");
  162. //strSql.Append("go");
  163. //strSql.Append("/*==============================================================*/");
  164. //strSql.Append("/* Table: " + tableName + " */");
  165. //strSql.Append("/*==============================================================*/");
  166. //strSql.Append("create table " + tableName + " (");
  167. //strSql.Append(" LogId varchar(50) not null,");
  168. //strSql.Append(" SourceObjectId varchar(50) null,");
  169. //strSql.Append(" SourceContentJson text null,");
  170. //strSql.Append(" IPAddress varchar(50) null,");
  171. //strSql.Append(" IPAddressName varchar(200) null,");
  172. //strSql.Append(" Category int null,");
  173. //strSql.Append(" constraint PK_BASE_LOG primary key nonclustered (LogId)");
  174. //strSql.Append(")");
  175. //strSql.Append("go");
  176. DataBaseLinkEntity dataBaseLinkEntity = dataBaseLinkService.GetEntity(dataBaseLinkId);
  177. StringBuilder strSql = new StringBuilder();
  178. strSql.Append("if exists (select 1");
  179. strSql.Append(" from sysobjects");
  180. strSql.Append(" where id = object_id('" + tableName + "')");
  181. strSql.Append(" and type = 'U')");
  182. strSql.Append(" drop table " + tableName + " ");
  183. strSql.Append("\r\n");
  184. strSql.Append("create table " + tableName + " (");
  185. foreach (var field in fieldList)
  186. {
  187. var column = field.column;
  188. var datatype = field.datatype;
  189. if (datatype == "varchar") datatype = datatype + "(" + field.length + ")";
  190. var isnuallable = field.isnullable == "0" || field.isnullable == "" ? "not null" : "null";
  191. var primary = field.key == "0" || field.key == "" ? "" : "primary key";
  192. var identity = field.identity =="0"||field.identity =="" ? "" : "IDENTITY(1,1)";
  193. var defaultvalue = field.defaults;
  194. strSql.Append(" " + column + " " + datatype + " " + isnuallable + " " + primary + " " + identity + " ");
  195. defaultvalue = defaultvalue.Replace("(", "").Replace(")", "").Replace("'", "");
  196. ;
  197. if (!string.IsNullOrEmpty(defaultvalue))
  198. {
  199. strSql.Append(" default('" + defaultvalue + "')" + " ");
  200. }
  201. strSql.Append(",\r\n");
  202. }
  203. strSql.Append(") \r\n");
  204. strSql.Append(" EXECUTE sp_addextendedproperty 'MS_Description', \r\n\t'" + tableDescription
  205. + "',\r\n\t'user', 'dbo', 'table', '"
  206. + tableName + "'\r\n");
  207. foreach (var field in fieldList)
  208. {
  209. var coloumn = field.column;
  210. var description = field.remark;
  211. strSql.Append(" EXECUTE sp_addextendedproperty 'MS_Description', " +
  212. "\r\n\t'" + description + "',\r\n\t'user', 'dbo', 'table', '"
  213. + tableName + "', 'column', '" + coloumn + "'\r\n");
  214. }
  215. this.BaseRepository(dataBaseLinkEntity.DbConnection).ExecuteBySql(strSql.ToString());
  216. }
  217. #endregion
  218. }
  219. }