private void InitPublicTables(IEnumerable<ITableFilter> tableFilters, IEnumerable<ITableFilter> columnsToGenerate) { { var sqlBuffer = new List<string>(); var bindBuffer = new List<object>(); foreach (ITableFilter filter in tableFilters) filter.InitSQL("t", sqlBuffer, bindBuffer); using ( SqlDataRecordExtended rs = _conn.ExecuteDataReader( @" select table_name from INFORMATION_SCHEMA.TABLES t where t.TABLE_TYPE = 'BASE TABLE' " + StringUtil.Agg(" AND ", sqlBuffer.ToArray()), bindBuffer.ToArray()) ) { while (rs.Read()) { string tableName = rs.GetString("table_name"); var currentTable = new Table(tableName); Tables.Add(currentTable.TableName, currentTable); } } } { var sqlBuffer = new List<string>(); var bindBuffer = new List<object>(); foreach (ITableFilter filter in tableFilters) filter.InitSQL("t", sqlBuffer, bindBuffer); foreach (ITableFilter filter in columnsToGenerate) filter.InitSQL("c", sqlBuffer, bindBuffer); using ( SqlDataRecordExtended rs2 = _conn.ExecuteDataReader( @" select c.TABLE_NAME , c.COLUMN_NAME , c.DATA_TYPE, c.CHARACTER_MAXIMUM_LENGTH as Size, c.IS_NULLABLE as IsNullable, c.COLUMN_DEFAULT as DefaultValue, c.ordinal_position , t.TABLE_TYPE as TableType from INFORMATION_SCHEMA.COLUMNS c inner join INFORMATION_SCHEMA.TABLES t on c.TABLE_NAME = t.TABLE_NAME where t.TABLE_TYPE = 'BASE TABLE' " + StringUtil.Agg(" AND ", sqlBuffer.ToArray()), bindBuffer.ToArray()) ) { while (rs2.Read()) { var attr = new Column( rs2.GetString("COLUMN_NAME"), rs2.GetString("DATA_TYPE"), (short) rs2.GetInt32("ordinal_position"), rs2.GetString("TABLE_NAME"), !GetBoolean(rs2.GetString("IsNullable"))); Columns.Add(attr.GetKey(), attr); } } } foreach (var curr in Tables) { GetPublicTableAttributesCached(curr.Value.TableName, curr.Value.Columns); GetTableConstraintsCached(curr.Value.TableName, curr.Value); } // namespace }