Geralmente para se preencher um DataTable é preciso utilizar um DataAdapter.
Com este código é possível carregar e preenher um System.Data.DataTable com dados de um SqlDataReader.
public static DataTable GetTable(SqlDataReader sqlReader) { DataTable schemaTable = sqlReader.GetSchemaTable(); DataTable outputTable = new DataTable(); DataColumn dcColumn; DataRow drRow; for (int i = 0; i <> { dcColumn = new DataColumn(); if (! outputTable.Columns.Contains(schemaTable.Rows[i]["ColumnName"].ToString())) { dcColumn.ColumnName = schemaTable.Rows[i]["ColumnName"].ToString(); dcColumn.Unique = Convert.ToBoolean(schemaTable.Rows[i]["IsUnique"]); dcColumn.AllowDBNull = Convert.ToBoolean(schemaTable.Rows[i]["AllowDBNull"]); dcColumn.ReadOnly = Convert.ToBoolean(schemaTable.Rows[i]["IsReadOnly"]); outputTable.Columns.Add(dcColumn); } } while (sqlReader.Read()) { drRow = outputTable.NewRow(); for ( int i = 0; i <> { drRow[i] = sqlReader.GetValue(i); } outputTable.Rows.Add(drRow); } return outputTable; }