Architettura e novità di ADO.NET 2.0

di Riccardo Golia, in ASP.NET 2.0,

Nell'articolo intitolato Introduzione ad ADO.NET abbiamo già parlato di come è strutturata la parte del .NET Framework dedicata all'accesso ai dati, con particolare riferimento alle caratteristiche presenti nelle versioni 1.x. Come molte parti del .NET Framework, anche ADO.NET nella versione 2.0 ha subito un significativo refactoring che ha comportato una serie di migliorie in termini architetturali e non solo. Molte delle caratteristiche presenti nelle versioni precedenti di ADO.NET sono sostanzialmente rimaste inviarate, ma a queste si sono aggiunte una serie di novità decisamente interessanti.

Architettura di ADO.NET 2.0

ADO.NET 2.0 è composto da una serie di namespace che raccolgono le diverse classi per l'accesso ai dati in funzione del loro scopo e della loro implementazione:

  • il namespace System.Data racchiude le primitive di uso generale indipendenti dalla particolare tipologia di sorgente dati;
  • i Managed Data Provider implementano in modo particolare le primitive necessarie all'accesso ad una specifica sorgente dati;
  • i namespace System.Data.Common e System.Data.ProviderBase includono le classi base per gli oggetti fondamentali presenti in ciascun Data Provider ed implementati in modo specifico a partire da una struttura comune;
  • il namespace System.Data.SqlTypes contiene le classi (quindi reference type) che rappresentano i tipi di dati utilizzati in ambito SQL.

Come detto, i Data Provider rappresentano i contenitori per le implementazioni specifiche degli oggetti utilizzati per l'accesso ad una particolare sorgente dati. Il .NET Framework include cinque Data Provider built-in relativi alle sorgenti dati più in uso nell'ambito dello sviluppo di applicazioni in ambiente Microsoft. La sezione <system.data /> del machine.config contiene l'elenco dei Data Provider disponibili a livello di sistema.

NomeDescrizioneNome invarianteFully Qualified Name
Odbc Data Provider.Net Framework Data Provider for OdbcSystem.Data.OdbcSystem.Data.Odbc.OdbcFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
OleDb Data Provider.Net Framework Data Provider for OleDbSystem.Data.OleDbSystem.Data.OleDb.OleDbFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
OracleClient Data Provider.Net Framework Data Provider for OracleSystem.Data.OracleClientSystem.Data.OracleClient.OracleClientFactory, System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
SqlClient Data Provider.Net Framework Data Provider for SqlServerSystem.Data.SqlClientSystem.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
SQL Server CE Data Provider.NET Framework Data Provider for Microsoft SQL Server 2005 Mobile EditionMicrosoft.SqlServerCe.ClientMicrosoft.SqlServerCe.Client.SqlCeClientFactory, Microsoft.SqlServerCe.Client, Version=9.0.242.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91

I Data Provider OleDb e Odbc non sono specifici per un particolare DBMS, ma servono da tramite verso sorgenti dati accessibili tramite provider OLE DB e driver ODBC. Diversamente ai managed provider dedicati a SQL Server e Oracle, che utilizzano esclusivamente classi native nell'ambito del .NET Framework, i Data Provider OleDb e Odbc escono dall'ambiente managed interoperando con l'ambiente unmanaged COM sottostante. Il costo legato al marshaling nel passaggio da ambiente managed ad ambiente unmanaged fa preferire da un punto di vista prestazionale l'utilizzo dei managed provider specifici quando siano disponibili.

Il Data Provider per SQL Server si riferisce alle versioni superiori alla 7.0, mentre per la versione 6.5 occorre utilizzare i provider OleDb (compatibile in particolare con SQLOLEDB, MSDAORA e il Jet Engine di Access) oppure Odbc (riferito ai driver ODBC, tra cui anche quelli per SQL Server, Oracle e Jet Engine). Il provider per Oracle si rivolge alla versione 9i, supporta tutti i relativi tipi di dati ed è contenuto, come nelle versioni precedenti, in un assembly separato. Parallelamente ai Data Provider built-in sono disponibili e reperibili su Internet anche i provider di altri DBMS come, per esempio, MySQL.

Figura 1

I managed provider di ADO.NET implementano un insieme comune di classi astratte (non più solo interfacce come nelle versioni precedenti) contenute nel namespace System.Data.Common:

  • DbConnection: permette la connessione ad un database;
  • DbConnectionStringBuilder: è l'oggetto builder per la costruzione della stringa di connessione;
  • DbCommand: consente l'esecuzione di comandi SQL e di Stored Procedure;
  • DbCommandBuilder: è l'oggetto builder per la costruzione di un comando SQL;
  • DbDataReader: implementa un cursore forward-only (statico), read-only e client side;
  • DbTransaction: permette di eseguire più comandi in un contesto transazionale;
  • DbDataAdapter: consente di "riempire" un container disconnesso (DataSet oppure DataTable);
  • DbParameter: rappresenta un parametro di input e/o output per una Stored Procedure;
  • DbParameterCollection: rappresenta una collezione di parametri;
  • DbException: funge da classe base per le eccezioni specifiche di un Data Provider;
  • DbProviderFactory: è una classe factory per la creazione di istanze di alcuni degli oggetti sopra elencati (connessioni, comandi, ecc.).
4 pagine in totale: 1 2 3 4
Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti