2010-08-20 6 views
5

Come posso convertire un DataSet in un DataReader?Come posso convertire DataSet a su DataReader?

+2

mi sembra che ci sia un difetto in quello che si sta cercando di fare. Cosa stai cercando di fare ad un livello superiore? – Dann

+0

Non puoi. Se vuoi ulteriori spiegazioni, ti preghiamo di fornire maggiori informazioni. –

risposta

13

È possibile utilizzare il seguente codice per modificare set di dati a DataReader:

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

DataSet ha un metodo chiamato CreateDataReader che creerà un DataTableReader, ma non credo che si può creare un DataReader.

DataSet.CreateDataReader

0

DataSet è un oggetto disconnesso in memoria. DataReader è un oggetto unidirezionale connesso.

Quindi immagino che non sia possibile.

È davvero necessario?

+0

https://msdn.microsoft.com/en-us/library/system.data.common.dbdatareader(v=vs.110).aspx - Legge un flusso forward-only di righe da un'origine dati. Non dice nulla sull'essere 'Connesso' ad un database. – JJS

0

Se si desidera eseguire un'iterazione tramite DataSet, non è necessario un DataReader. DataSet è un oggetto in memoria scollegato quindi iterare attraverso utilizzando for-each:

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

Non è possibile convertire un DataSet a un DbDataReader.

È tuttavia possibile creare un DbDataReader che leggerà i risultati dal DataSet chiamando il metodo CreateDataReader sul DataSet.

Tuttavia, questa sembra una cosa strana da voler fare. È possibile semplicemente scorrere i risultati contenuti nel DataSet utilizzando la proprietà Tables di DataSet e la proprietà The Rows di DataTable. L'utilizzo di un DbDataReader potrebbe limitare l'inoltro solo ai risultati. L'unico vantaggio che posso vedere usando DbDataReader sarebbe se avessi una chiamata API per effettuare quale richiesto come parametro.

Se il DataSet è il risultato di un comando SELECT da un database, è possibile ottenere un DbDataReader chiamando DbCommand.ExecuteReader(). Questo eliminerà del tutto il DataSet e darà come risultato qualcosa di più efficiente.