Ago
25
.net framework 4.0
Filed Under .Net | Leave a Comment
E’ vero, lo so, sì …. non aggiorno il blog da una vita; ma questo post serve come buon proposito per il futuro … prometto che da ora in poi aggiornero’ con maggior frequenza il mio blog
prometto che da ora in poi aggiornero’ con maggior frequenza il mio blog
prometto che da ora in poi aggiornero’ con maggior frequenza il mio blog
anzi
for(int i=0; i<1000; i++)
puts(”prometto che da ora in poi aggiornero’ con maggior frequenza il mio blog”);
… e lo faro’ presto iniziando con una bella panoramica su tutto cio’ che riguarda il fantastico mondo del .net fw4.0 che ho studiato durante le mie vacanze nelle montagne del Trentino…. prometto.
Nov
21
ADO.NET Essentials
Filed Under .Net | Leave a Comment
L’object model di ADO.NET puo’ essere suddiviso in: data-related components/content components (DataSet e suoi derivati, quali DataTable, DataView, ecc) e data-provider components (Connection, Command, DataReader, ecc).

Il dataset e’ analogo a una cache di un subset di database che puo’ essere usato per operazioni disconnesse.
Il DataAdapter permette di leggere il contenuto da una fonte dati e di inviare al datasource i cambiamenti operati nel DataSet.
I vantaggi di ADO.NET sono:
Interoperabilita: l’uso di XML come formato di dati su HTTP minimizza i problemi di firewall ed e’ sufficiente un parser xml per interpretare i dati.
Scalabilita: in una architettura client/server e’ tipico stabilire una connessione e non lasciarla fino al termine dell’operazione; questo, al crescere della complessita’ delle architetture, comporta un dispendio di CPU e di risorse di rete. Con l’uso di dataset disconnessi, viene bypassato questo problema. Quando un client richiede dei dati, si connettte, li ottiene e chiude la connessione appena possibile, risolvendo il problema delle connessioni limitate.
Visto che in certi contesti l’operazione di connessione e’ molto pesante, si potrebbe pensare che aprire e chiudere la connessione non sia una grande idea, ma questo varrebbe se non ci fosse il connection pooling; ado.net mantiene le connessioni a un datasource in un pool, cosi’ che quando una app ne chiude una, questa non viene distrutta ma inserita nel pool pronta per essere recuperata successivamente senza la necessita’ di essere creata da zero.
Performance: i dataset disconnessi e il connection pooling velocizzano moltissimo le opeazioni e, visto che le info sono in xml non servono nepppure conversioni da tipi di dati particolari, come avveniva con COM. Esistono poi data provider ottimizzati per diversi tipi di DB, in modo che possano dialogare direttamente con il db server, ad es. il Data Provider per SqlServer.
CONTENT COMPONENTS
I cc incapsulano dati;
DataSet
In ADO, i dati erano trasferiti in RecordSet, che contiene dati in forma tabellare; anche se provenienti da piu’ tabelle, i dati arrivano joined come se arrivassero da una tabella unica; nel dataset e’ aggiunta una dimensione consentendo l’arrivo di piu’ recordset insieme. Puo’ essere visto come una vista in memoria del database che contiene piu’ DataTable e DataRelations.
Ma come avviene la sincronizzazione dei dati quando il DS e’ disconnesso?? In qualche modo lui stesso deve tenere traccia dei cambiamenti operati su di se’, infatti esistono metodi e proprieta (anche invocabili da noi) come HasChanges(), HasErrors, GetChanges(), AcceptChanges(), RejectChanges(); per attivare le modifiche esiste il metodo Update del DS.
Il DataSet ha 2 importanti collezioni: Tables (di tipo DataTableCollection) e Relations (di tipo DataTableRelations):
DataSet
DataTableCollection
DataTable
DataRowCollection
DataRow
DataColumnCollection
DataColumn
DataView
DataRelationCollection
DataRelation
Esempione:
DataSet ds = new DataSet("ds_squadre");
ds.Tables.Add("squadre");
ds.Tables["squadre"].Columns.Add(”id_squadra”);
ds.Tables["squadre"].Columns.Add(”ds_squadra”);
ds.Tables["squadre"].Columns.Add(”valore_squadra”);
DataRow dr;
dr = ds.Tables["squadre"].NewRow();
dr["id_squadra"] = 1;
dr["ds_squadra"] = “Juve”;
dr["valore_squadra"] = 9;
ds.Tables["squadre"].Rows.Add(dr);
dr = ds.Tables["squadre"].NewRow();
dr["id_squadra"] = 2;
dr["ds_squadra"] = “Inter”;
dr["valore_squadra"] = 1;
ds.Tables["squadre"].Rows.Add(dr);
ds.WriteXml(Console.Out);
ds.AcceptChanges(); //commmit, da ora in poi controlla cambiamenti
ds.Tables["squadre"].Rows[1]["valore_squadra"] = 0;
if (ds.HasChanges())
{
DataSet changeDS = ds.GetChanges();
Console.WriteLine(”DIFFERENCES”);
changeDS.WriteXml(Console.Out, XmlWriteMode.DiffGram);
ds.AcceptChanges();
Console.WriteLine(”FINAL SITUATION”);
ds.WriteXml(Console.Out);
}
L’output risultante e’ questo:

Data providers
Connection: a differenza della Connection ADO, il supporto per le transazioni e’ stato spostato su uno specifico oggetto Transaction perche’ non si poteva asssumere che tutti i data providers garantissero lo stesso supporto per le transazioni. Non e’ altresi’ presente nessun metodo Execute, ora demandato in modo piui’ pulito all’oggetto Command, insomma la Connection fa la connection….
Command: l’oggetto Command, tramite la prop Connection e’ associato a una connessione. Il Command e’ l’unico modo per fare insert/update/delete da ADO.NET. Ci sono 2 tipi di esecuzione: la query, tramite il metodo ExecuteQuery e l’esecuzione di ins/upd/del, tramite ExecuteNonQuery. A differenza di ADO, cio’ che viene restituito da Command non e’ un RecordSet ma un DataReader.
DataReader: consente di accedere ai records in forward-only e read-only e di loopare tramite il metodo Read()
Data Adapter: agisce da bridge tra il datasource e il dataset disconnesso. Esso contiene una Connection e una serie di Command per prelevare i dati e metterli in una DataTable nel DataSet e modificarli nel Datasource quando cambiano nel DataSet. Il metodo Fill del DataAdapter riempie un DataSet in base al comando associato e il metodo Update() invia le modifiche fatte sul DataSet verso il DataSource.
Nov
18
.NET Framework essentials
Filed Under .Net | Leave a Comment
Sviluppare con VB.NET e C# senza conoscere i fondamenti del framework e’ un po’ come guidare senza conoscere il motore dell’auto: si puo’ fare, ma se un giorno fosse necessario ridare l’esame della patente si verrebbe senz’altro bocciati….
In questa pagina voglio esplorare il framework partendo dalle sue fondamenta.
Nov
1
PDC 2008
Filed Under .Net | Leave a Comment
Sono online le registrazioni video delle sessioni del PDC 2008 appena svoltosi a Los Angeles. E’ un bel gesto da parte di MS nei confronti di coloro che non sono potuti esserci di persona. Grande ![]()