Exemplo n.º 1
0
        private static IEnumerable <DbDataColumnValue> GetItemValuesForDbFields(Object Item, DbDataColumns DbFields)
        {
            if (Item is IDictionary <string, object> dictKeyValue)
            {
                foreach (var val in dictKeyValue)
                {
                    DbDataColumn dataColumn = null;
                    DbFields.TryGetValue(val.Key, out dataColumn);
                    if (dataColumn == null)
                    {
                        continue;
                    }

                    yield return(new DbDataColumnValue()
                    {
                        Name = dataColumn.Name,
                        Value = val.Value
                    });
                }
            }
            else if (Item is IDictionary dict)
            {
                foreach (var key in dict.Keys)
                {
                    DbDataColumn dataColumn = null;
                    DbFields.TryGetValue(UniConvert.ToString(key), out dataColumn);
                    if (dataColumn == null)
                    {
                        continue;
                    }

                    yield return(new DbDataColumnValue()
                    {
                        Name = dataColumn.Name,
                        Value = dict[key]
                    });
                }
            }
            else
            {
                foreach (DbDataColumn databaseColumn in DbFields.Values)
                {
                    PropertyInfo itemProperty = ReflectionHelper.GetProperty(Item, databaseColumn.Name);
                    if (itemProperty != null)
                    {
                        yield return(new DbDataColumnValue()
                        {
                            Name = databaseColumn.Name,
                            Value = itemProperty.GetValue(Item, null)
                        });
                    }
                }
            }
        }
Exemplo n.º 2
0
        //////////////////////////////////////////

        public static DbDataColumns GetColumns(
            this DbConnection Connection,
            String TableName)
        {
            lock (_lck)
            {
                TableName = (TableName ?? "").Trim().ToUpper();
                if (!_columnsCache.ContainsKey(TableName))
                {
                    Connection.OpenIfClosed();

                    DbDataColumns columns = new DbDataColumns();
                    using (var lCommand = Connection.CreateCommand())
                    {
                        MyQuery query = new MyQuery();
                        query.Append("select column_name from information_schema.columns where table_name = {0}", TableName);

                        lCommand.CommandTimeout = 60 * 5;
                        lCommand.CommandText    = query.ToString();

                        using (var lReader = lCommand.ExecuteReader())
                        {
                            while (lReader.Read())
                            {
                                string name = Convert.ToString(lReader.GetValue(0), CultureInfo.InvariantCulture);
                                columns[name] = new DbDataColumn()
                                {
                                    Name = name,
                                };
                            }
                        }
                    }
                    _columnsCache[TableName] = columns;
                }
                return(_columnsCache[TableName]);
            }
        }