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) }); } } } }
////////////////////////////////////////// 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]); } }