Exemplo n.º 1
0
 /// <summary>
 /// Получаем схему таблицы по имени
 /// </summary>
 /// <param name="tableName">Имя таблицы</param>
 /// <param name="byDbName">искать по имени таблицы как в базе данных или как нормализованное имя для С#</param>
 /// <returns>Возвращает схему таблицу</returns>
 public static UniSchemaTable GetTable(string tableName, bool byDbName = true)
 {
     if (byDbName)
     {
         if (_dbdictionary == null)
         {
             _dbdictionary = Tables.ToDictionary(r => r.TableDbName, r => r, StringComparer.OrdinalIgnoreCase);
         }
         UniSchemaTable t = null;
         if (_dbdictionary.TryGetValue(tableName, out t))
         {
             return(t);
         }
         else
         {
             return(null);
         }
     }
     else
     {
         if (_dictionary == null)
         {
             _dictionary = Tables.ToDictionary(r => r.TableName, r => r, StringComparer.OrdinalIgnoreCase);
         }
         UniSchemaTable t = null;
         if (_dictionary.TryGetValue(tableName, out t))
         {
             return(t);
         }
         else
         {
             return(null);
         }
     }
 }
Exemplo n.º 2
0
        /// <summary>
        /// Создание структуры таблицы по имени таблицы в БД
        /// </summary>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static DataTable CreateTable(string tableName, string schemaTable = null)
        {
            if (string.IsNullOrWhiteSpace(tableName))
            {
                throw new Exception("Ошибка получения схемы. Не задано имя таблицы");
            }
            UniSchemaTable st = GetTable(tableName);

            if (st != null)
            {
                DataTable table = new DataTable(tableName);
                foreach (var item in st.Columns)
                {
                    table.Columns.Add(item.DbColumnName, item.ColumnType);
                }
                table.DisplayExpression = st.TableComment;
                return(table);
            }
            else
            {
                DataTable    t   = new DataTable(tableName);
                UniDbAdapter oda = new UniDbAdapter(UniDbCommand.GetSelectCommand(tableName, schemaTable, "1=2"));
                oda.Fill(t);
                return(t);
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// Имя схемы таблицы в базе даннных
 /// </summary>
 /// <param name="type">тип данных для проверки схемы</param>
 /// <returns>Имя схемы</returns>
 public static string GetSchemaName(Type type)
 {
     //Получаем сначала атрибут класса. Он первичный для определения имени схемы
     object[] prop = type.GetCustomAttributes(typeof(TableAttribute), true);
     if (prop != null && prop.Length > 0)
     {
         return((prop[0] as TableAttribute).SchemaName);
     }
     else
     {
         UniSchemaTable st = GetTable(type.Name, false);
         if (st != null)
         {
             return(st.SchemaName);
         }
     }
     return(string.Empty);
 }
Exemplo n.º 4
0
        /// <summary>
        /// Метод получения столбцов для обновления или добавления данных
        /// </summary>
        /// <returns>Возвращает список столбцов которые терубется обновлять в базе данных</returns>
        public static IEnumerable <UniSchemaColumn> GetUpdatedColumns(string tableName, DataTable table = null)
        {
            UniSchemaTable stable = SchemaTableManager.GetTable(tableName); //здесь требуется реализовать чтение схемы таблицы из текстового файла Реализую позже кажется реализовал

            if (stable != null)
            {
                return(stable.Columns);
            }
            else
            {
                return(table.Columns.Cast <DataColumn>().Select(r => new UniSchemaColumn()
                {
                    ColumnName = r.ColumnName,
                    DbColumnName = r.ColumnName,
                    ColumnType = r.DataType,
                    DbColumnType = UniDbTypeHelper.GetUniDbType(r.DataType),
                    IsPrimaryKey = (r.ColumnName).Equals(tableName + "_ID", StringComparison.OrdinalIgnoreCase)
                }));
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Получаем имя поля первичного ключа по типу класса
        /// </summary>
        /// <param name="type">Тип класса у которого требуется получить первичный ключ</param>
        /// <returns>имя первичного ключа или пусто</returns>
        public static string GetPrimaryKeyField(Type type)
        {
            //Получаем сначала атрибут класса. Он первичный для определения имени схемы
            PropertyInfo prop = type.GetProperties().Where(r => r.GetCustomAttributes(typeof(ColumnAttribute), true).Any(t => (t as ColumnAttribute).IsPrimaryKey))
                                .FirstOrDefault();

            // если существует поле с признаком первичного ключа, то берем его название
            if (prop != null)
            {
                ColumnAttribute ca = prop.GetCustomAttributes(typeof(ColumnAttribute), true).First() as ColumnAttribute;
                return(ca.Name);
            }
            else
            {
                UniSchemaTable st = GetTable(type.Name, false);
                if (st != null)
                {
                    return(st.Columns.Where(r => r.IsPrimaryKey).FirstOrDefault()?.DbColumnName);
                }
            }
            return(string.Empty);
        }