ADO.NET, la parte del .NET Framework dedicata all'accesso a database e sorgenti dati di tipo relazionale, ha subito nella nuova versione importanti modifiche che ne hanno senz'altro migliorato l'architettura. Una delle novità più significative è rappresentata dal fatto che ciascun oggetto contenuto in un Data Provider di ADO.NET 2.0 deriva da una specifica classe base di tipo astratto contenuta nel namespace System.Data.Common. Per esempio, System.Data.SqlClient.SqlConnection deriva da System.Data.Common.DbConnection, System.Data.OleDb.OleDbCommand deriva da System.Data.Common.DbCommand e così via. Oltre agli oggetti tradizionali, già presenti nelle versioni precedenti del .NET Framework, in ciascun Data Provider è stato introdotto un oggetto factory per la creazione delle istanze.
Ciascun oggetto factory associato ad uno specifico Data Provider di ADO.NET deriva dalla classe System.Common.DbProviderFactory, applica il design pattern Abstract Factory e include in particolare i metodi di creazione delle istanze di connessioni, comandi, DataAdapter e parametri.
La classe statica DbProviderFactories contenuta anch'essa nel namespace System.Data.Common espone il metodo GetFactory(string) che permette di istanziare uno specifico oggetto DbProviderFactory in funzione del nome invariante del Data Provider. L'elenco dei Data Provider disponibili è presente nell'ambito del machine.config e per ciascuno di essi è indicato il relativo nome invariante che lo identifica univocamente.
Una volta istanziato l'oggetto factory in funzione del nome invariante, è possibile creare connessioni, eseguire comandi e navigare i resultset di una query in modo indipendente dal Data Provider in uso. Il codice che ne risulta è indipendente dal particolare Data Provider utilizzato.
string providerInvariantName = ConfigurationManager.ConnectionStrings["DataSource"].ProviderName;
string connectionString = ConfigurationManager.ConnectionStrings["DataSource"].ToString();
DataTable dt = new DataTable();
// Creazione dell'oggetto factory
DbProviderFactory factory = DbProviderFactories.GetFactory(providerInvariantName);
// Interrogazione del database
using (DbConnection connection = factory.CreateConnection())
{
connection.ConnectionString = connectionString;
connection.Open();
using (DbDataAdapter adatpter = factory.CreateDataAdapter())
{
DbCommand select = factory.CreateCommand();
select.CommandText = "SELECT * FROM Customers";
select.Connection = connection;
adatpter.SelectCommand = select;
adatpter.Fill(dt);
}
}
// Data-Binding di una ipotetica griglia di dati
gridDemo.DataSource = dt;
gridDemo.DataBind();- #933 - Una GridView con supporto per più righe selezionabili
- #938 - Paginazione con il DataPager di ASP.NET 3.5
- Il modo più facile per far andare ASP.NET 3.5 sul vostro server
- uno snippet per inserire riga di commento
- Speciale ASP.NET security
- UrlRewriting con trabocchetti vari
- #934 - Accedere ai dati usando LinqDataSource
- #909 - Un custom control per recuperare da web.config il formato dell'URL di ImageField
- #935 - Sfruttare l'evento LoadComplete della pagina
- FtpDataSource: datasource per FTP
- Rilasciata la CTP Preview di ASP.NET 3.5 Extensions
Esprimi il tuo giudizio su questo script:
Per procedere devi essere autenticato.
e le prestazioni?insomma perchè non utilizzare un provider specifico per un database anzicchè uno astratto? Certo, se domani cambia il database non ...
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.








Stampa
Snippet
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!

Ormai si tende a scrivere tonnellate di layer, wrapper di wrapper, tutto per facilitare la scrittura di codice ed aumentare la produttività (otrtima ...
Continua »»» | Rispondi »»»