Home Page Home Page Articoli Introduzione ad ADO.NET - Parte 1

Introduzione ad ADO.NET - Parte 1

ADO.NET è uno dei componenti chiave del .NET Framework. Eredita il nome dal vecchio ADO ma è praticamente quasi tutto cambiato. Una nuova architettura, nuovi concetti, nuove funzionalità e nuovi oggetti. Vediamo quali sono e a cosa servono.
Autore: Stefano Passatordi Livello:
ADO.NET è il componente per l'accesso ai dati del Microsoft .NET Framework, è una evoluzione del precedente componente ADO con cui ha pochi punti in comune e rappresenta una vera e propria rivoluzione per svariati motivi che passeremo in rassegna nei vari articoli, in ogni caso coloro che possiedono già una certa familiarità con ADO non faranno molta fatica ad apprendere le funzionalità e le caratteristiche del nuovo componente di casa Microsoft.

Capire la struttura del componente ADO.NET
Come tutti gli altri componenti del .NET Framework, ADO.NET consiste di un insieme di oggetti che interagiscono fra loro per svolgere una determinata funzione, per questo motivo in questo primo articolo ci concentreremo di più sulla parte teorica per capire bene da quali oggetti è composto l'intero namespace e come sono legati fra loro. La figura sottostante mostra una vista semplificata degli oggetti che compongono ADO.NET.



ADO.NET è composto da due componenti fondamentali il Data Provider (di solito anche chiamato Managed Provider, che mantiene la connessione con la sorgente dati fisica) e il DataSet (che rappresenta i dati attuali, ovvero i dati su cui si sta lavorando). Entrambi i componenti possono comunicare con i Data Consumers , ovvero i fruitori dei loro servizi, come, ad esempio una WinForm o una WebForm.

ADO.NET Data Providers
Il Data Provider è specifico per ogni fonte dati (data source), il .NET Framework 1.0 include due Data Providers : uno generico per la comunicazione con data source di tipo OLE DB e uno specifico per Microsoft SQL Server versione 7 o superiore. Dalla versione del Framework 1.1 sono stati aggiunti anche l'ODBC Data Provider e l'Oracle Data Provider.
Quasi tutti questi providers contengono gli stessi oggetti, si differenziano per il nome (Es : SQLConnection, OleDbConnection, OracleConnection, ecc.) e per alcune proprietà e metodi.

Oggetto Connection
L?oggetto Connection rappresenta la connessione fisica verso la sorgente dati e le sue proprietà variano in base al tipo di Data Providers , i suoi metodi più importanti e usati permettono di:

- aprire e chiudere una connessione
- cambiare il database
- utilizzare le transazioni

Oggetto Command
L?oggetto Command rappresenta una istruzione SQL o una Stored Procedure da eseguire sulla sorgente dati. Può essere creato e utilizzato su una specifica connessione indipendentemente da altri oggetti oppure può essere utilizzato dall? oggetto DataAdapter per il trasferimento di dati dal DataSet alla sorgente dati vera e propria. L?oggetto Command supporta istruzioni SQL o stored procedure che ritornano un singolo valore, uno o più record o alcun valore.

Oggetto DataReader
L?oggetto DataReader permette di ottenere uno stream di dati (un Recordset per utilizzare un termine tecnico utilizzato in ADO),di tipo forward-only o read-only, dal data source in maniera rapida e facile.Non può essere creato direttamente via codice ma viene restituito dall?esecuzione del metodo ExecuteReader dell?oggetto Command.
Bisogna inoltre sottolineare un'importante limitazione, è possibile infatti aprire un solo DataReader per connessione mentre dalla versione del .NET Framework 2.0 sarà possibile aprire DataReader multipli. Nessuno vi vieta però di aprire più connessioni per avere più DataReader.

Oggetto DataAdapter
L?oggetto DataAdapter è forse quello più complesso di ADO.NET; il suo ruolo è quello di fungere da ponte tra l?oggetto Connection e l?oggetto DataSet. Il DataAdapter contiene quattro oggetti Command al suo interno : SelectCommand, UpdateComamnd, InsertComamnd e DeleteComamnd. Il primo comando viene utilizzato per riempire il DataSet tramite il metodo Fill e tutti gli altri comandi vengono chiamati in automatico per trasferire le informazioni contenute nel DataSet alla sorgente dati a seconda se nel DataSet uno o più record sono stati aggiornati,inseriti o eliminati.

Oggetto DataSet
Il componente DataSet non è altro che la rappresentazione dei dati contenuti in memoria centrale, la figura sottostante mostra la sua struttura:



Può essere concepito come una copia in memoria della sorgente dati fisica con tutte le tabelle e le relazioni esistenti, è importante capire che il DataSet non è assolutamente collegato direttamente al data source e che non conosce la provenienza dei dati, infatti può accettare dati di svariato tipo e da fonti dati di tipologia varia. Per questo motivo si dice che il DataSet lavora in modalità "Disconnessa".
Il DataSet, a sua volta, è composto da altri due oggetti importanti : il DataTable Collection e il DataRelation Collection.
Il DataTable Collection contiene zero o più oggetti DataTable che, a loro volta, sono composti da tre Collections:

- Columns (Colonne)
- Rows (Righe/Records)
- Constraints (Vincoli)

La Collection del DataTable contiene i dati attuali definiti dalla Collections Columns, per ogni Row (Riga o Record), il DataTable mantiene i valori originali , quelli correnti e/o quelli (nuovi) proposti.

La Collection Constraints contiene zero o più oggetti Constraints, tanti quanti sono i Constraints presenti nel Database originale e il ruolo è lo stesso, ovvero mantenere l?integrità dei dati anche in modalità disconessa.

ADO.NET supporta due tipi di Constraints :

- ForeignKeyConstraints che serve a mantenere l?integrità relazionale (relazioni tabelle padre-figlio )

- UniqueConstraints che mantiene l?integrità dei dati (righe non duplicate).

Il DataRelationCollection contiene zero o più oggetti DataRelations che servono a navigare tra le tabelle, ovvero partendo da una certa riga di una tabella si arriva ad una o più righe di altre tabelle che sono appunto legate a quella di partenza tramite una relazione, il classico esempio è la relazione tra la tabella Ordini e la tabella DettagliOrdini.

Conclusioni
In questo articolo abbiamo introdotto il nuovo componente Microsoft ADO.NET spiegando a cosa serve e soprattutto da quali e quante parti è composto e come queste interagiscono tra loro.
Come abbiamo potuto vedere ADO.NET è un componente molto complesso e potente che richiede una profonda conoscenza strutturale prima di poterlo utilizzare in maniera adeguata per sfruttare al massimo le sue potenzialità, per questo nei prossimi articoli continueremo ad approfondire lo studio dei suoi componenti inserendo anche qualche riga di codice con esempi pratici.

Voto medio articolo: 4.8 Numero Voti: 8
Stefano Passatordi

Stefano Passatordi

Laureato in Tecnologie Informatiche presso l'Università di Pisa.Amante della programmazione in generale,ha iniziato da autodidatta con VB6 e poi tramite l'università e studi personali ha approfondito le sue conoscenze in vari ambiti del mondo della programmazione. Profilo completo

Articoli collegati

Utilizzare NUnit per testare codice .NET
Scopriamo in questo articolo come utilizzare il popolare framework Open Source NUnit per effettuare Unit Testing del codice .NET aumentandone la qualità e riducendo il numero di eventuali bugs.
Autore: Michela Zangarelli | Difficoltà:
SQL Injection, che cosa è e come difendersi
I malintenzionati sono sempre dietro l'angolo. Il SQL Injection è una delle pratiche più semplici da utilizzare per attaccare un'applicazione poco sicura e violarla o arrecare danni al database. Vediamo che cos'è e come garantire la sicurezza delle applicazioni in modo adeguato.
Autore: Alessandro Alpi | Difficoltà: | Commenti: 4
Visual Studio 2005 Team System
Scopriamo il nuovo IDE di sviluppo che copre interamente l'intero ciclo di vita del software integrando in un solo ambiente più prodotti e studiato apposta per i ruoli di Architect, Developer e Tester.
Autore: Marco Caruso | Difficoltà: | Voto:
Tutorial ADO.NET ed esempi pratici - Parte 2
Dopo aver fatto un po' di teoria su ADO.NET nella Parte 1 dell'articolo procediamo con un Tutorial pratico che ci condurrà alla creazione di un'applicazione basilare che consenta l'accesso e la modifica dei dati su un Database Access.
Autore: Stefano Passatordi | Difficoltà: | Commenti: 10
Colonne calcolate e parola "Child" con ADO.NET
Una cosa utile di ADO.NET e' la possibilita di aggiungere ad una colonna da codice il cui valore sia il risultato di operazioni sui dati dei record (o tra valori di altre colonne). Quando si utilizza un dataset con piu tabelle collegate mediante relazioni invece, usando la parola chiave "child" si possono avere delle informazioni riguardanti le tabelle figlio, direttamente nei record della tabella
Autore: Matteo Raumer | Difficoltà: | Voto:
Usare degli indicatori di progresso con Query SQL
Nell'articolo vediamo come sia possibile con un l'aiuto delle classi DataReader e Command di ADO.NET, mostrare un indicatore di progresso che indichi lo stato di avanzamento di una query SQL durante il fetching dei dati.
Autore: Matteo Raumer | Difficoltà: | Voto:
La crittografia e la classe Rijndael
Vediamo come utilizzare una delle tante classi messe a disposizione dal .NET Framework per la crittografia dei dati. In particolare la classe Rijndael implementa un algoritmo di crittografia molto forte diventato famoso negli ultimi anni.
Autore: David De Giacomi | Difficoltà:
DES il famoso standard creato da IBM per la crittografia dei dati
In questo articolo dimostreremo come crittografare dei file usando il .NET Framework e in particolare la classe DESCryptoServiceProvider che implementa l'ormai noto algoritmo di cifratura inventato da IBM negli anni 70 chiamato DES (Data Encryption Standard)
Autore: David De Giacomi | Difficoltà: | Commenti: 2 | Voto:
Cosa sono e come funzionano le funzioni ricorsive?
Ecco tre esempi efficaci che vi spiegano come usare correttamente le funzioni ricorsive, per effettuare ricerche di file e cartelle all'interno del disco fisso, per ricostruire la struttura di un file XML oppure per svuotare determinati controlli in una Form.
Autore: Matteo Raumer | Difficoltà: | Commenti: 2
Costruire Console Applications con Visual Studio .NET
Spiegheremo in questo articolo i passi base fondamentali per costruire Console Applications utilizzando Visual Studio .NET.
Autore: David De Giacomi | Difficoltà: | Voto:
TextReader e TextWriter
Una panoramica su come utilizzare queste due classi che ci permettono di leggere e scrivere file di testo.
Autore: David De Giacomi | Difficoltà: | Commenti: 1 | Voto:
Giochiamo un po' con il registro di Windows!
Scopriamo uno degli elementi fondamentali del sistema operativo Windows e vediamo come è possibile accedervi tramite le classi offerte dal .NET Framework: Microsoft.Win32.Registry e Microsoft.Win32.RegistryKey
Autore: David De Giacomi | Difficoltà: | Commenti: 1 | Voto:
.NET Framework 1.1 Beta
Una prima panormaica sulle novità offerte dal Framework 1.1 che sarà integrato nella prossima versione di Visual Studio .NET 2003.
Autore: David De Giacomi | Difficoltà:
Cosa posso costruire con Visual Studio .NET ?
Un' introduzione sui vari tipi di progetto disponibili in Visual Studio dalle tipiche applicazioni Windows fino alle recenti applicazioni Web e agli innovativi Web Services.
Autore: David De Giacomi | Difficoltà: | Commenti: 1
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5