Architettura di ADO.NET | ||
Semplice accesso a SQL Server in C# |
Nel .NET Framework l'accesso ai dati è gestito dal set di classi chiamato ADO.NET, estensione degli esistenti ActiveX Data Objects (ADO). I componenti di ADO:NET sono stati progettati per dividere l'accesso ai dati dalla manipolazione degli stessi. A questo scopo si utilizzano i due componenti principali di ADO.NET: il DataSet e il .NET Data Provider. DataSet Il DataSet è il componente chiave dell'architettura di ADO.NET, ed è esplicitamente progettato per accedere ai dati indipendentemente dalla loro sorgente. Esso rappresenta un contenitore, mantenuto in memoria, per un sottoinsieme dei dati del database, come ad esempio il risultato di una query. Gli oggetti DataSet e Command permettono di creare una cache lato client di uno o più recordset e di elaborarla dopo la sconnessione; infatti DataSet è un oggetto disconnesso, quindi una volta che i dati sono stati caricati al suo interno, la connessione con il database non è più utilizzata finchè non si renda necessario caricare altri dati o aggiornare il server con le modifiche fatte nella copia in memoria delle informazioni. Il DataSet rappresenta un completo set di dati che includono tabelle, vincoli e relazioni fra le tabelle. Il modello dell'oggetto DataSet è mostrato qui sotto:
I metodi e gli oggetti in DataSet sono coerenti con quelli nel modello di database relazionale. DataSet può essere reso persistente, ed è possibile ricaricare i suoi contenuti come XML e il suo schema come uno schema XSD (Schema Definition language). DataTableCollection DataRelationCollection ExtendedProperties
.NET Data Provider L'altro elemento principale dell'architettura
di ADO.NET è il .NET Data Provider i componenti del quale
sono progettati per la manipolazione dei dati e un veloce accesso
in lettura forward-only. Il .NET Framework viene fornito con due .NET Data Provider: l'SQL Server .NET Data Provider e l' OLE DB .NET Data Provider. SQL Server .NET Data Provider permette
la connessione a Microsoft SQL Server 7.0 e successivi, mediante
l'uso del suo oggetto SqlConnection. Le classi di SQL Server .NET
Data Provider sono posizionate nel namespace System.Data.SqlClient. OLE DB .NET Data Provider permette al
connessione ad una sorgente OLE DB o a Microsoft SQL Server 6.0
e precedenti [installando l'OLE Provider for SQL Server]. Per stabilire la connessione con SQL Server si utilizza la Security Support Provider Interface (SSPI) che stabilisce un'interfaccia comune tra le applicazioni a livello di trasporto come una remote procedure call (RPC), ed i Security Support Provider (SSP) come Windows Distributed Security. SSPI permette alle applicazioni di utilizzare i diversi modelli di sicurezza disponibili sul computer o in rete senza cambiare l'interfaccia al sistema di sicurezza. I .NET Data Provider hanno quattro classi chiave che sono derivate dalle interfacce IDbConnection, IDbCommand, IDataReader, IDbDataAdapter che si trovano nel namespace System.Data. Queste quattro classi si manifestano in SQL Server o OLE DB provider come SqlConnection, OledbConnection per la classe Connection; SqlCommand, OledbCommand per la classe Command; SqlDataReader, OledbDataReader per la classe DataReader; SqlDataAdapter OledbDataAdapter per la classe DataAdapter. Facciamo ora una breve analisi di queste quattro classi. La classe Connection. Questa classe è ereditata dall'interfaccia IDbConnection ed è utilizzata per stabilire le connessioni al database: I comandi inviati al database saranno eseguiti utilizzando questa connessione, che deve essere chiusa esplicitamente dopo l'uso per poterla rendere nuovamente disponibile. Le Connection non sono infatti chiuse implicitamente quando l'oggetto esce dallo scope o è reclamato dal Garbage Collector. La classe Command. Ereditata dall'interfaccia IDbCommand, è
utilizzata per eseguire comandi Transact SQL o procedure memorizzate
sul database. La classe Command espone i seguenti metodi: ExecuteReader: esegue una query o una
procedura memorizzata che seleziona record. Ci si aspettano uno
o più risultati. Si accedono ai
record selezionati con con l'oggetto SqlDataReader e si usa il metodo
Read per leggerli. La classe DataReader. Ereditata dall'interfaccia IDataReader è utilizzata per leggere i data dal database come un flusso in sola lettura forward only. E' un modo efficiente per recuperare i dati ed ha una scarsa occupazione di memoria perché legge un record alla volta dal database e per questo viene utilizzata per leggere grandi quantità di dati. Questa classe espone i seguenti metodi: Read: per leggere le righe nel flusso
di dati ottenuto. La classe DataAdapter. Ereditata dall'interfaccia IDbDataAdapter è usata per riconciliare i dati tra il DataSet e il database, in entrambe le direzioni. Questa classe è principalmente usata per interagire con il DataSet che è una sorgente di dati disconnessa. Questa classe espone i seguenti metodi: Fill: riempie il DataSet con i dati provenienti
dal database e quindi rilascia la connessione rendendo il DataSet
disponibile per un esame accurato. Fonti: http://www.csharphelp.com/archives/archive103.html |