Home > ASP.NET, Postgresql - SQL > Asp.net differenze tra IDataReader, NpgsqlDataAdapter, DataSet e DataTable

Asp.net differenze tra IDataReader, NpgsqlDataAdapter, DataSet e DataTable

DataReader e DataAdapter sono oggetti presenti in tutti i provider dati .NET Framework è hanno la funzione di consentire il recupero dei dati da un database o comunque da un origine dati. I provider dei dati .NET framework  sono componenti espressamente progettati  che consentono la connessione ad un database, l’esecuzione di comandi e il recupero dei dati. Rappresentano uno dei principali componenti di ADO.NET (attualmente – ver.3.0) la cui funzione è consentire uniformita nell’accesso ai dati sia per origini dati presentate via ODBC e OLE DB sia per origini quali database SQL Server ( MS SQL Server, Oracle, Postgresql …) e XML.

L’oggetto DataReader consente di recuperare i dati in sola lettura ( forward-only ) da un database.
Il DataAdapter consente il recupero dei dati e la compilazione degli stessi all’interno di un oggetto DataSet o DataTable.

Il provider di dati .Net framework per SQL Server mette a disposizione  SqlDataReader e SqlDataAdapter. Analogamente in quello per ODBC avremo OdbcDataReader e OdbcDataAdapater. In quello per OLE DB troveremo OledbDataReader e OledbDataAdapter. Per ulteriore dettagli  Provider di dati .NET Framework Nel caso di PostreSQL uno dei provider dati .NET più utilizzati è Npgsql. Scritto in c# mette a disposizioni IDataReader e NpgsqlDataAdapter.

L’altro componente principale di ADO.NET oltre al provider dei dati .NET è   DataSet. Semplificando si tratta di una cache di dati cioè DataSet è una rappresentazione di dati presente in memoria composta da una collezione di tabelle con le relazioni tra le stesse. Trattandosi di una rappresentazione coerente indipendente dall’origini dati stessa non è necessaria una connessione attiva con l’origine dati per la manipolazione dei dati. La connessione e richiesta solo per l’update dei records nel database.

Di seguito un confronto sintetico tra  IDataReader, NpgsqlDataAdapter, DataTable, DataSet per la connessione a database Postgresql utilizzando Nplgsql

DataReader

IDataReader essendo un DataReader consente la sola lettura dei dati. .  E’ più performante di DataSet. Generalemente può essere iterato una sola volta ( Il cursore si muove in una sola direzione )Per associare i dati di una tabella postgresql ad una GridView utilizzando IDataReader si utilizza il codice seguente:

NpgsqlConnection conn = new NpgsqlConnection("Server=10.0.1.150, Port=5432;Database=myDB;Users ID=ospite;Password=abcd1234;Encoding=unicode;Pooling=falseConnectionLifeTime=10");
conn.Open();
NpgsqlCommand cmd = new NpgsqlCommand("Select ....", conn); 
IDataReader dr = cmd.ExecuteReader();
GridView1.DataSource = dr; 
GridView1.DataBind(); 
conn.Close();

DataAdapter

IDataAdapter come DataAdapter consente il recupero dei dati e la compilazione associandoli all’oggetto DataSet. In pratica un ponte tra database e DataSet. DataAdapter poichè consente una rappresentazione coerente dei dati in memoria è anche indicato come “disconnected oriented architecture”. Per associare i dati da un database postgresql ad una GridView utilizzando un DataAdapter è necessario ricorrere anche ad un DataSet (o una Datatable). Il codice sarà il seguente:

... 
conn.Open();
NpgsqlCommand cmd = new NpgsqlCommand("Select ....", conn); 
NpgsqlDataAdapter da = new NpgsqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds) ; 
GridView1.DataSource = ds; 
GridView1.DataBind(); 
conn.Close();

DataSet

DataSet è una rappresentazione di dati presente in memoria composta da una collezione di DataTables con le relazione tra le tabelle. Una volta caricati i dati la connessione al database può essere chiusa anche automaticamente. I DataSet per agire sui dati non necessitano di una connessione attiva con l’origine dati trattandosi di una rappresentazione dei dati coerente indipendente dall’origine dati stessa.
E’ possibile selezionare dati da tabelle, creare viste e richiamare child rows basate su relazioni. DataSet offre funzionalità avanzate quali il salvataggio dei dati in XML e il caricamento di dati XML. DataSet necessita di un DataAdapter per la lettura dei dati dal database.  Il codice sarà inevitabilmente identico a quello indicato nel caso del NpgsqlDataAdapter:

...
conn.Open();
NpgsqlCommand cmd = new NpgsqlCommand("Select ....", conn); 
NpgsqlDataAdapter da = new NpgsqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds) ; 
GridView1.DataSource = ds; 
GridView1.DataBind(); 
conn.Close();
 

DataTable

DataTable si comporta come DataSet con la differenza che rappresenta solo una singola tabella del database con righe (records/rows) e colonne ( columns/fields). Pertanto anche in questo caso non è necessaria una connessione attiva quando si opera su una DataTable ed è necessario un DataAdapter.

....
conn.Open();
NpgsqlCommand cmd = new NpgsqlCommand("Select ....", conn); 
NpgsqlDataAdapter da = new NpgsqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt) ; 
GridView1.DataSource = da; 
GridView1.DataBind(); 
conn.Close();

Convertire un dataset in datareader

Per convertire un dataset in datareader è possibile utilizzare un istruzione del tipo seguente:

DataTableReader _dr = _ds.Tables[0].CreateDataReader();

Convertire un dataset in DataTable

Per convertire un dataset in datatable è possibile utilizzare un istruzione del tipo seguente:

DataTable _dt = _ds.Tables[0];
oppure
DataTable _dt = _ds.Tables["products"]

Risorse:

Annunci
  1. Non c'è ancora nessun commento.
  1. No trackbacks yet.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: