Exemplo n.º 1
0
        public static IDataTable FromDataReader(
            IDataReader reader,
            int skip = 0,
            int take = int.MaxValue)
        {
            Guard.NotNull(reader, nameof(reader));

            if (reader.IsClosed)
            {
                throw new ArgumentException("This operation is invalid when the reader is closed.", "reader");
            }

            var columns = new List <IDataColumn>(reader.FieldCount);
            var data    = new List <object[]>();

            var schema = reader.GetSchemaTable();

            var nameCol = schema.Columns[SchemaTableColumn.ColumnName];
            var typeCol = schema.Columns[SchemaTableColumn.DataType];

            foreach (DataRow schemaRow in schema.Rows)
            {
                var column = new LightweightDataColumn((string)schemaRow[nameCol], (Type)schemaRow[typeCol]);
                columns.Add(column);
            }

            var fieldCount = reader.FieldCount;

            take = Math.Min(take, int.MaxValue - skip);

            int i = -1;

            while (reader.Read())
            {
                i++;

                if (skip > i)
                {
                    continue;
                }

                if (i >= skip + take)
                {
                    break;
                }

                var values = new object[fieldCount];
                reader.GetValues(values);
                data.Add(values);
            }

            var table = new LightweightDataTable(columns, data);

            return(table);
        }
        public static IDataTable FromDataReader(
			IDataReader reader, 
			int skip = 0, 
			int take = int.MaxValue)
        {
            Guard.ArgumentNotNull(() => reader);

            if (reader.IsClosed)
                throw new ArgumentException("This operation is invalid when the reader is closed.", "reader");

            var columns = new List<IDataColumn>(reader.FieldCount);
            var data = new List<object[]>();

            var schema = reader.GetSchemaTable();

            var nameCol = schema.Columns[SchemaTableColumn.ColumnName];
            var typeCol = schema.Columns[SchemaTableColumn.DataType];

            foreach (DataRow schemaRow in schema.Rows)
            {
                var column = new LightweightDataColumn((string)schemaRow[nameCol], (Type)schemaRow[typeCol]);
                columns.Add(column);
            }

            var fieldCount = reader.FieldCount;

            take = Math.Min(take, int.MaxValue - skip);

            int i = -1;
            while (reader.Read())
            {
                i++;

                if (skip > i)
                    continue;

                if (i >= skip + take)
                    break;

                var values = new object[fieldCount];
                reader.GetValues(values);
                data.Add(values);
            }

            var table = new LightweightDataTable(columns, data);

            return table;
        }