Convertir DataReader a DataSet
Publicado por: Eder Oscar Lázaro Rodriguez (edoswit)El DataReader y el DataSet son dos formas muy diferentes de acceso a datos con ADO.NET. El DataReader proporciona una conexión directa con el camino a los datos y es la manera más rápida de leer datos de una base de datos. El DataSet es básicamente una colección, y tiene un montón de funcionalidades para apoyar el trabajo con datos relacionales.
Para la mayoría de acceso a datos, Microsoft recomienda y yo prefiero usar el DataReader, sin embargo, hay ocasiones en que un DataReader no hará el trabajo, como por ejemplo cuando los datos deben ser serializado para almacenarlos en caché o el envío de regreso de un servicio web. Además, no existe un método estándar para convertir entre un DataReader y un DataSet en el Framework .NET. Por lo tanto, una opción en su aplicación es una función para convierte un DataReader en un DataSet, que está listo para ser almacenado en caché o enviados a través de un servicio web. Ahora dejandonos de tanto hablar vamos al código que es mi mejor manera de expresarme:
DataSet ConvertDataReaderToDataSet(IDataReader reader)
{
DataSet ds = new DataSet();
// Bucle a través del conjuntos de datos
do {
DataTable schema = reader.GetSchemaTable();
DataTable table = new DataTable();
if (schema != null) {
// Crear un DataTable y agregarlo al DataSet
for (int i=0; i<schema.Rows.Count; i++) {
DataRow row = schema.Rows[i];
string name = (string) row["ColumnName"];
DataColumn column = new DataColumn (name, (Type) row["DataType"]);
table.Columns.Add (column);
}
ds.Tables.Add (table);
// Rellene la tabla de datos
while (reader.Read()) {
DataRow row = table.NewRow ();
for (int i=0; i<reader.FieldCount; i++ )
row[i] = reader.GetValue (i);
table.Rows.Add (row);
}
}
else {
DataColumn column = new DataColumn ("RowsAffected");
table.Columns.Add (column);
ds.Tables.Add (table);
DataRow row = table.NewRow ();
row[0] = reader.RecordsAffected;
table.Rows.Add (row);
}
} while (reader.NextResult());
return ds;
}
Saludos...







