Home Page Home Page Articoli Microsoft Application Blocks Data Access

Microsoft Application Blocks Data Access

Quante volte vi è capitato di riscrivere decine di volte lo stesso pezzo di codice all'interno di un progetto ? Scopriamo in questo articolo l'utilità dei Microsoft Application Blocks che vi permettono di ottimizzare il vostro codice evitando ripetizioni e vi facilitano la lettura.
Autore: Marco Caruso Livello:
I Microsoft Application Block sono una serie di componenti sviluppati sempre da Microsoft (o società partner) per ottimizzare e rendere solide le applicazioni che si producono, ce ne sono diversi, da quello che gestisce la Cache, a quello che gestisce l'Exception e vari altri, in questo articolo ci occuperemo del Data Access che ci permette di accedere al database di Sql Server ottimizzando il codice.
I Data Access Blocks utilizzano ADO.NET, ma non lo sostituiscono, ci permettono di eseguire comandi o storeprocedure ottimizzando il codice.

Per prima cosa per poterli utilizzare bisogna scaricarli e lo facciamo da questo link :
http://www.microsoft.com/downloads/details.aspx?FamilyId=F63D1F0A-9877-4A7B-88EC-0426B48DF275&displaylang=en ">Data Access Application Block
viene scaricato un file .msi che una volta installato estrae la DLL che ci interessa la Microsoft.ApplicationBlocks.Data.dll; questa DLL la possiamo utilizzare senza aver bisogno di licenze e senza limiti di tempo.

I Data Access ci permettono di :

? Richiamare StoreProcedure o Transact-Sql
? Specificare e salvare i nostri parametri
? Ritornano SqlDataReader, DataSet o XmlReader
? Utilizzano i Dateset Tipizzati


Vediamo un po' di codice in azione:

Dopo aver referenziato la nostra DLL e averla richiamata tramite using/Imports possiamo utilizzare la classe SqlHelper che è predisposta all'esecuzione dei comandi ed espone 13 metodi statici(shared in VB.NET) così da non dover istanziare tale classe.

Vediamo quindi come è possibile recuperare un DataSet con una sola riga di codice:

Utilizziamo come il solito il mitico database "Northwind":

C#

System.Data.DataSet ds = SqlHelper.ExecuteDataset(ConnectionString,System.Data.CommandType.Text, "Select * from orders ");


VB.NET

Dim ds as Dataset = SqlHelper.ExecuteDataset(ConnectionString,System.Data.CommandType.Text, "Select * from orders ");


Lo stesso procedimento si può utilizzare con il DataReader:

C#

SqlDataReader reader = SqlHelper.ExecuteReader(ConnectionString,System.Data.CommandType.Text, "Select * from orders");


VB.NET

Dim reader as SqlDataReader = SqlHelper.ExecuteReader(ConnectionString,System.Data.CommandType.Text, "Select * from orders ")


Come vedete non s?istanzia nessun oggetto Connection e non si gestisce né l'apertura né la chiusura della connessione, allora come si comporta il componente?

In due diversi in modi:
Nel caso del DataSet la connessione viene aperta quando si richiede il DataSet e chiusa nel momento in cui viene restituito, mentre per il DataReader viene chiusa nel stesso momento in cui viene chiuso il DataReader, è come quando viene utilizzato il metodo ExecuteReader(Connection.Close).
Di default quando si chiama un metodo si passa il nome di una Stored Procedure, se invece dobbiamo passargli un comando Sql(come nel nostro caso), dobbiamo specificarlo in questo modo System.Data.CommandType.Text.

Sia il metodo ExecuteDataset che il metodo ExecuteReader hanno diversi overloading che accettano anche:

? SqlConnection, Nome della Store Procedure, un'array di object che sono i parametri da passare alla Stored Procedure
? SqlTransaction, Nome della Store Procedure, array di SqlParameter

Questo componente ci dà la possibilità sia di ottimizzare il codice come abbiamo visto, ma anche di avere il massimo della personalizzazione, utilizzando sia la connessione, che la transazione, in base alle esigenze e alle situazioni, inserendo a "piacimento" un'array d'oggetti generici oppure un'array di SqlParameter.

Stesso discorso vale se dobbiamo lanciare un comando di Insert/Update/Delete:
SqlHelper.ExecuteNoQuery(connessione,"StoreProcedure",parametri)

I Data Access possono restituire anche un XmlReader, in un precedente Tip (http://www.dotnethell.it/Tips/Tip.aspx?TipID=113 ">Restituire un file XML tramite SQL Server) abbiamo gia visto come recuperare i valori in formato XML da SQL Server, ed è lo stesso "meccanismo" utilizzato dal comando ExecuteXmlReader:

SqlHelper.ExecuteXmlReader(SqlConnection,System.Data.CommandType.Text, "Select * from orders")

Il commando ExecuteXmlReader a differenza degli altri che abbiamo visto in precedenza deve avere o un oggetto SqlConnection o un oggetto SqlTransaction, perchè non ha la possibilità di chiudere da solo la connessione.

In dettaglio tutti i metodo usati dalla classe SqlHelper:

? CreateCommand
? ExecuteDataset
? ExecuteNoQuery
? ExecuteReader
? ExecuteReaderTypedParams
? ExecuteScalar
? ExecuteScalarTypedParams
? ExecuteXmlReader
? ExecuteXmlReaderTypedParams
? FillDataset
? UpdDataset


I metodi con "TypedParams" sono utilizzati per i Dataset Tipizzati.

I Data Access oltre alla classe SqlHelper contiene anche la classe SqlHelperParamerCache, che serve per gestire i parametri.

Questa classe espone tre metodi

? CacheParameterSet
? GetCachedParameterSet
? GetSpParameterSet



CacheParameterSet
Questo metodo serve a ad inserire in una HastTable un array di SqlParamater, per poter utilizzare questo metodo bisogna specificare la ConnectionString e il nome della Stored Procedure(o Transact-SQL)

SqlHelperCachedParameterSet.CacheParameterSet("connectionstring","StoredProcedure",ArraySqlParameter)


GetCachedParameterSet
Serve per recuperare dalla cache i parametri settati e restituisce un array di SqlParameter


SqlHelperCachedParameterSet.GetCachedParameterSet("connessione","storedprocedure")


GetSpParameterSet
Restituisce un array di SqlParameter dalla Stored Procedure indicata, questo metodo utilizza al suo interno il SqlCommandBuilder come già visto in un altro Tip (http://www.dotnethell.it/Tips/Tip.aspx?TipID=75 ">Come recuperare i parametri da una Stored Procedure con ADO.NET ? )


SqlHelperCachedParameterSet.GetSpParameterSet("connessione","storeprocedure")



Conclusioni
Come avete potuto vedere questo componente utilizza in pieno le classi e i metodi usati con ADO.NET, quindi non vi risulterà complicato lavorarci. Possiamo gestire i parametri passandoli sia come oggetti sia come array di SqlParameter, potendoli anche inserire in una nostra "cache". Risultano molto utili e comodi in ambienti con più programmatori dove bisogna rispettare uno standard di accesso al Database; inoltre come avrete potuto intuire con gli Application Blocks viene ottimizzato al massimo il codice evitando le inutili ripetizioni.
Voto medio articolo: 3.5 Numero Voti: 2
Marco Caruso

Marco Caruso

Consulente Informatico di Roma, inizia la sua carriera nel 2000 utilizzando la tecnlogia Lotus Notes e il server Domino. Alla fine del 2001 passa alla piattaforma Microsoft.NET dove si appassiona sempre più a questa nuova tecnlogia. Importanti progetti a livello Enterprise per grandi società lo portano a cono... Profilo completo

Articoli collegati

Garantire l'univocità di una colonna ammettendo valori NULL multipli
Chi sviluppa in ambito professionale o per puro diletto prima o poi si troverà ad affrontare tematiche nuove ed avvincenti. In questo articolo cercherò di illustrare tre tecniche con i relativi pregi e difetti per permettere con SQL Server di garantire l'univocità di una colonna senza alcuna limitazione sui valori NULL
Autore: Lorenzo Benaglia | Difficoltà:
Integrare Crystal Reports con una Windows Form
Ecco come sfruttare in modo semplice e rapido le funzionalità offerte dal tool di reportistica Crystal Reports di Business Objects all'interno di una Windows Form .NET, dalla crazione del Report al Binding dei dati.
Autore: Matteo Raumer | Difficoltà: | Commenti: 2
Il Logging con Integration Services 2005
Perchè si è bloccata la mia applicazione ? Che errori si sono verificati ? Perchè il flusso d'esecuzione non procede nel modo corretto ? Cerchiamo di capire come possono esserci utili le funzionalità di logging offerte da SQL Server e gli Integration Services per rendere più affidabili e consistenti le nostre applicazioni.
Autore: Alessandro Alpi | Difficoltà: | Commenti: 3
Utilizzare i SQL Server Agent Proxies con i Package SSIS
Chi utilizza frequentemente i SSIS Packages e accede a risorse esterne a SQL Server non può fare a meno di conoscere ed utilizzare i Proxy Account (o SQL Server Agent Proxies). Vediamo che cosa sono e come si utilizzano in modo proficuo.
Autore: Alessandro Alpi | Difficoltà: | Commenti: 4
SQL Server 2005 - La Import/Export utility
Chi lavora sui Database si ritrova quasi quotidianamente a dover importare o esportare dati. SQL Server 2005 agevola notevolmente il compito tramite l'Import/Export Utility (ex DTS Import/Export di SQL 2000). Vediamo come funziona.
Autore: Alessandro Alpi | Difficoltà: | Commenti: 14
Visual Studio 2005 Team System for Database Professionals
Scopriamo questo nuovo e potente Tool della famiglia Visual Studio 2005 Team System per creare, sviluppare, testare e gestire con più facilità e flessibilità i database di SQL Server.
Autore: Marco Caruso | Difficoltà:
Parallelismo tra SSIS e DTS, due prodotti a confronto
In questo articolo un'analisi sulle novità dei SQL Server 2005 Integration Services rispetto ai DTS di SQL Server 2000.
Autore: Alessandro Alpi | Difficoltà: | Commenti: 2
Overview dei SQL Server Integration Services (SSIS)
Scopriamo i nuovi Sql Server Integration Services presenti in SQL Server 2005 che sostituisco i DTS aggiungendo delle nuove funzionalità davvero interessanti
Autore: Alessandro Alpi | Difficoltà: | Commenti: 6 | Voto:
Leggere un file XML con SQL Server 2005
Scopriamo in questo articolo alcune potenzialità offerte dal nuovo database SQL 2005, tra cui il nuovo data type XML, e le Stored Procedures per importare e gestire all'interno del database file testuali in formato XML.
Autore: Lorenzo Benaglia | Difficoltà: | Commenti: 5
ExcelDataSetLib, una libreria .NET per esportare dati in formato Excel
In questo articolo verrà dimostrato come derivare la classe DataSet e integrare funzionalità per esportare in formato Excel XLS, XML o CSV i dati provenienti da un base dati qualsiasi.
Autore: David De Giacomi | Difficoltà: | Commenti: 3 | Voto:
Comprimere e decomprimere files ZIP con .NET e #ZipLib
Visualizzare il contenuto di un file Zip da una applicazione vi sembra una Mission Impossibile? Oppure la vostra azienda ha fatto un mutuo per pagare il componente che vi aiuta nel lavoro? Ecco un articolo che parla della libreria sharpZipLib, libreria Open Source per la gestione dei formati compressi.
Autore: Giovanni Ferron | Difficoltà: | Commenti: 7
Rivoluzione nel campo dei Reports con i SQL Reporting Services
Finalmente Microsoft ci mette a disposizione uno straordinario tool per la produzione di Report perfettamente integrato con l'architettura .NET. Fino ad ora siamo sempre stati abituati ad utilizzare il buono seppur limitato Crystal Report. Vediamo cosa cambia da ora in poi.
Autore: David De Giacomi | Difficoltà: | Commenti: 6 | Voto:
Scopriamo cosa sono gli Office XP PIA
Vediamo in quest'articolo una dettagliata introduzione dei PIA gli assemblies che permettono ad un'applicazione .NET di interagire e di dialogare con i prodotti della suite Microsoft Office XP.
Autore: David De Giacomi | Difficoltà: | Commenti: 6
Migliorare la qualità dei grafici nei Crystal Reports
In questo breve articolo vedremo come aumentare la qualità dei grafici prodotti da Crystal Reports durante il rendering tramite Web con ASP.NET e all'interno di applicazioni WinForms.
Autore: David De Giacomi | Difficoltà:
Costruire Report con ASP.NET e Crystal Reports
Vedremo in questo semplice Tutorial le istruzioni base che ci permetteranno di costruire un report avanzato usando ASP.NET e l'oggetto CrystalReportViewer integrato in questa versione di Visual Studio .NET.
Autore: David De Giacomi | Difficoltà: | Commenti: 14
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5