Exemple #1
0
    /// <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);
    }
Exemple #2
0
    /// <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 }));
                }
            }
        }