/// <summary> /// 获取列的信息 /// </summary> /// <returns></returns> public static void InitColumn(Data_Source item, bool IsLoad, string tableName) { var key = string.Format(AppEtl.CacheKey.Column, item.Host, tableName); if (RedisInfo.Exists(key, AppEtl.CacheDb) && IsLoad) { return; } var list = new List <CacheColumn>(); var dt = new DataTable(); using (var conn = DbProviderFactories.GetFactory(item.Type).CreateConnection()) { conn.ConnectionString = AppCommon.GetConnStr(item); conn.Open(); var cmd = conn.CreateCommand(); cmd.CommandText = ColumnSql(item, tableName); if (cmd.CommandText == "") { return; } var rd = cmd.ExecuteReader(); dt.Load(rd); rd.Close(); } foreach (DataRow row in dt.Rows) { var column = new CacheColumn(); column.Name = (row.ItemArray[0] == DBNull.Value ? "" : row.ItemArray[0].ToString()); column.Type = row.ItemArray[1] == DBNull.Value ? "" : row.ItemArray[1].ToString(); column.Length = row.ItemArray[2] == DBNull.Value ? 0 : int.Parse(row.ItemArray[2].ToString()); column.Comments = row.ItemArray[3] == DBNull.Value ? "" : row.ItemArray[3].ToString(); column.IsKey = row.ItemArray[4].ToString() != "0" ? true : false; column.Precision = row.ItemArray[7] == DBNull.Value ? 0 : int.Parse(row.ItemArray[7].ToString()); column.ShowName = string.Format("{0}({1})", column.Name, column.Comments); list.Add(column); } RedisInfo.Set <List <CacheColumn> >(key, list, 8640, AppEtl.CacheDb); }
/// <summary> /// 表说明 /// </summary> /// <returns></returns> public static void InitTable(Data_Source item, bool IsLoad) { var key = string.Format(AppEtl.CacheKey.Table, item.Host); if (RedisInfo.Exists(key, AppEtl.CacheDb) && IsLoad) { return; } var list = new List <CacheTable>(); var dt = new DataTable(); using (var conn = DbProviderFactories.GetFactory(item.Type).CreateConnection()) { conn.ConnectionString = AppCommon.GetConnStr(item); conn.Open(); var cmd = conn.CreateCommand(); cmd.CommandText = TableSql(item); if (cmd.CommandText == "") { return; } var rd = cmd.ExecuteReader(); dt.Load(rd); rd.Close(); } foreach (DataRow row in dt.Rows) { var table = new CacheTable(); table.Comments = row.ItemArray[1] == DBNull.Value ? "" : row.ItemArray[1].ToString(); table.Name = row.ItemArray[0] == DBNull.Value ? "" : row.ItemArray[0].ToString(); list.Add(table); Parallel.Invoke(() => { InitColumn(item, IsLoad, table.Name); }); } RedisInfo.Set <List <CacheTable> >(key, list, 8640, AppEtl.CacheDb); }
/// <summary> /// 操作 /// </summary> /// <param name="item"></param> /// <returns></returns> public IActionResult OnPostBusinessFormList(Data_Business_List item) { var result = new WriteReturn(); result.IsSuccess = true; using (var db = new DataContext(AppEtl.Db)) { if (IFast.Query <Data_Source>(a => a.Id == item.DataId).ToCount(db) == 0) { return(new JsonResult(new { success = false, msg = "数据源不存在" })); } var data = IFast.Query <Data_Source>(a => a.Id == item.DataId).ToItem <Data_Source>(db); var tableKey = string.Format(AppEtl.CacheKey.Table, data.Host); if (!RedisInfo.Exists(tableKey, AppEtl.CacheDb)) { DataSchema.InitTable(data, false); } var tableList = RedisInfo.Get <List <CacheTable> >(tableKey, AppEtl.CacheDb); foreach (var table in tableList) { var columnKey = string.Format(AppEtl.CacheKey.Column, data.Host, table.Name); if (!RedisInfo.Exists(columnKey, AppEtl.CacheDb)) { DataSchema.InitColumn(data, false, table.Name); } var tableModel = BaseMap.CopyModel <Data_Business, Data_Business_List>(item); tableModel.Id = Guid.NewGuid().ToStr(); tableModel.Name = string.IsNullOrEmpty(table.Comments) ? table.Name : table.Comments; tableModel.TableName = table.Name; if (result.IsSuccess) { result = db.Add(tableModel).writeReturn; } if (result.IsSuccess) { result = DataSchema.CreateTable(db, tableModel); } var columnList = RedisInfo.Get <List <CacheColumn> >(columnKey, AppEtl.CacheDb); var keyName = columnList.Find(a => a.IsKey == true)?.Name; var keyList = columnList.FindAll(a => a.IsKey == true); columnList.ForEach(column => { var columnModel = new Data_Business_Details(); columnModel.FieldId = Guid.NewGuid().ToStr(); columnModel.Id = tableModel.Id; columnModel.DataSourceId = data.Id; columnModel.TableName = table.Name; columnModel.ColumnName = column.Name; columnModel.FieldName = column.Name; columnModel.Key = keyName; if (result.IsSuccess) { result = db.Add(columnModel).writeReturn; } else { BaseLog.SaveLog(string.Format("tableName:{0},error:", table.Name, result.Message), "Error_CreateTable"); } if (result.IsSuccess) { if ((keyList.Count > 1 && keyList.Exists(a => a.Name == columnModel.FieldName))) { result = DataSchema.AddColumn(db, tableModel, columnModel, column, data, false); } else { result = DataSchema.AddColumn(db, tableModel, columnModel, column, data); } if (result.IsSuccess) { DataSchema.UpdateColumnComment(db, tableModel, columnModel, column, data); } } result.IsSuccess = true; }); if (keyList.Count > 1) { DataSchema.AddColumnMoreKey(db, tableModel, keyList); } } if (result.IsSuccess) { return(new JsonResult(new { success = true, msg = "操作成功" })); } else { return(new JsonResult(new { success = false, msg = result.Message })); } } }