/// <summary> /// 获取表在数据库中定义的字段 /// </summary> /// <param name="tableName"></param> /// <param name="connectionStringName"></param> /// <returns></returns> public static Tuple<string, Type>[] GetDatabaseColumns(string tableName, string connectionStringName) { if (tableName == null) { throw new ArgumentNullException("tableName"); } var cache = _dataBaseColumnsCache.Get(new Tuple<string, string>(tableName, connectionStringName), () => { var context = new DbQuery(connectionStringName); var connection = context.GetConnection(); var cmd = connection.CreateCommand(); cmd.CommandText = context.Provider.GetSelectColumnsSQL(tableName); IDataReader reader = null; try { connection.Open(); reader = cmd.ExecuteReader(); return reader.GetFields().ToArray(); } catch (Exception) { throw; } finally { if (reader != null) { reader.Dispose(); } if (connection.State != ConnectionState.Closed) { connection.Close(); } connection.Dispose(); cmd.Parameters.Clear(); cmd.Dispose(); context.Dispose(); } }); return cache; }