Logo UGIdotNET

Riempire una DataTable con un DataReader

Quando dobbiamo caricare una datatable il metodo migliore è quello di usare un data adapter, ogni provider dati di  ADO.NET ne possiede uno specifico. I data adapter permettono di caricare tramite il metodo Fill - nelle sue varie forme - una datatable e/o un dataset avendo come input un comando testuale o uno specifico command. Nessun data adapter mette a disposizione overload che usano un DataReader come sorgente. In genere i data adapter derivano da DbDataAdapter che dispone di tale funzionalità in modalità protetta e che nessuno specifico data adapter rimappa come pubblica. Ecco come farlo estendendo DbDataAdapter.

// "Il metodo ritorna il numero di righe aggiunte con esito positivo o aggiornate nell'oggetto DataTable."
// vedi documentazione MSDN: DbDataAdapter.Fill(DataTable, IDataReader).


public class GenericDbDataAdapter: DbDataAdapter
{
  public int FillFromReader(DataTable data, IDataReader reader)
  {
    return base.Fill(data, reader);
  }

  // Nel framework 1.x occorre implementare - anche usando NotSupportedException - i metodi astratti:
  // CreateRowUpdatedEvent, CreateRowUpdatingEvent, OnRowUpdated e OnRowUpdating.

}

Quale applicazione pratica potremmo avere? Ad esempio quando si ha la necessità di caricare i dati in una datatable senza perdere i metadati relativi allo schema della base dati, IDataReader.GetSchemaTable.

DataTable schema;
DataTable data = new DataTable();
GenericDbDataAdapter adp = new GenericDbDataAdapter();

using(IDataReader myReader = myCommand.ExecuteReader())
{
  schema = myReader.GetSchemaTable();
  adp.Fill(data, myReader);
}

Autore: Marco Barzaghi
Data: 20 febbraio 2006
Ultimo aggiornamento: 20 febbraio 2006
Categorie:  Data Access

© 2001 User Group Italiano UGIdotNET. Tutti i diritti riservati. Note legali. - Partita IVA 01927050185