2010-08-20 40 views
5

¿Cómo puedo convertir un DataSet en un DataReader?¿Cómo puedo convertir DataSet a a DataReader?

+2

Siento que hay una falla en lo que está tratando de hacer. ¿Qué estás tratando de hacer en un nivel superior? – Dann

+0

No puedes. Si desea más explicaciones, brinde más información. –

Respuesta

13

Usted puede utilizar el código siguiente para cambiar al conjunto de datos DataReader:

DataTableReader rd = ds.Tables[0].CreateDataReader(); 
0

DataSet tiene un método llamado CreateDataReader que creará un DataTableReader, pero no creo que se puede crear un DataReader.

DataSet.CreateDataReader

0

conjunto de datos es un objeto desconectado en memoria. DataReader es un objeto unidireccional conectado.

Así que supongo que no es posible.

¿Es realmente necesario?

+0

https://msdn.microsoft.com/en-us/library/system.data.common.dbdatareader(v=vs.110).aspx: lee una secuencia de solo reenvío de filas desde un origen de datos. No dice nada sobre estar "Conectado" a una base de datos. – JJS

0

Si desea iterar a través de DataSet, no necesita un DataReader. Conjunto de datos es un objeto desconectado en memoria de modo iterar a través de él usando para-cada uno:

foreach(var row in ds.Tables["YourTable"]) 
{ 
    var value = row.Field<int>("ID"); // etc 
} 
0

No es posible convertir un conjunto de datos a una DbDataReader.

Sin embargo, puede crear un DbDataReader que leerá los resultados del DataSet llamando al método CreateDataReader en el DataSet.

Sin embargo, esto parece una cosa extraña de querer hacer. Simplemente puede iterar a través de los resultados contenidos en el DataSet usando la propiedad Tables de DataSet y la propiedad The Rows de DataTable. El uso de un DbDataReader le restringiría a reenviar solo el acceso a los resultados. El único beneficio que puedo ver al usar un DbDataReader sería si tuviera una llamada API para hacer una requerida como parámetro.

Si su DataSet es el resultado de un comando SELECT de una base de datos, debería poder obtener un DbDataReader llamando a DbCommand.ExecuteReader(). Esto cortará por completo el conjunto de datos y dará como resultado algo que es más eficiente.

Cuestiones relacionadas