INFORMATICA MEDICA
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>INFORMATICA</strong> <strong>MEDICA</strong><br />
4/5. ADO.NET e Connessione<br />
Prof. Mauro Giacomini
Sommario<br />
• Archiettura del framework .NET<br />
• Architettura di ADO.NET<br />
• Connessione a un DB<br />
• Gestione della connessione<br />
• Creazione, proprietà e metodi della<br />
connessione<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Il framework .NET<br />
• Nuova piattaforma di sviluppo Microsoft<br />
• Versione attuale .NET 2013<br />
• Applicazioni distribuite a più livelli<br />
• Classi, oggetti e servizi di interazione<br />
• Data type specifici<br />
• Piattaforma di riferimento per Web services<br />
• Fortemente integrato con XML e ASP<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Obiettivi del framework (1)<br />
• Ambiente di sviluppo robusto per<br />
programmazione ad oggetti<br />
• Programmi eseguibili in locale – distribuiti via<br />
Internet – eseguiti in remoto<br />
• Conflitti minimi per le diverse versioni del<br />
software<br />
• Esecuzione sicura di software<br />
indipendentemente dalla sua origine<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Obiettivi del framework (2)<br />
• Ridurre i problemi di performance per<br />
l’interpretazione<br />
• Rendere gli ambienti di<br />
programmazione uniformemente fruibili<br />
• Standard comune per integrazione<br />
software<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Struttura del framework<br />
Gli strati del .NET Framework<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Struttura del framework (1)<br />
• Quando il sistema operativo sottostante è Microsoft Windows è<br />
possibile accedere ai suoi servizi e alle sue API.<br />
• Il Framework.NET ha come evoluzione del modello COM<br />
(Component Object Model) il modello COM+ che introduce il<br />
concetto di modularità dei componenti software (Component<br />
Oriented Programming).<br />
• COM+ rappresenta l’approccio strategico di “costruzione a<br />
blocchi” di Microsoft per lo sviluppo di applicazioni. Si può<br />
pensare a COM+ come ad un’architettura per la<br />
programmazione object-oriented e ad un insieme di servizi del<br />
sistema operativo.<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Struttura del framework (2)<br />
• Common Language Runtime (CLR): gestisce<br />
l’esecuzione del codice, servizi di base<br />
(gestione della memoria, dei task, delle code)<br />
• Common Type Specifications (CTS): sistema<br />
di tipi di dati comuni per tutto il framework<br />
• Interazione CLR-CTS garantisce la sicurezza e<br />
la robustezza dell’esecuzione del codice nel<br />
framework<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Struttura del framework (3)<br />
• Base Class Library (BCL): insieme di classi e<br />
oggetti usabili per lo sviluppo di applicazioni di<br />
vario tipo (desktop, web server, web service…)<br />
• Extended classes:<br />
• Windows form: specifica per le applicazioni desktop<br />
• ADO.NET: classi per l’accesso alle fonti di dati<br />
• ASP.NET: classi per lo sviluppo di applicazioni WEB<br />
• XML.NET: supporto per processare il formato XML<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Struttura del framework (4)<br />
• Common Language Specifications (CLS): set di<br />
specifiche che stabilisce le caratteristiche minime<br />
che un linguaggio di programmazione deve avere<br />
per essere qualificato come linguaggio .NET (es.<br />
gestione di tipi primitivi e di eccezioni .NET in caso<br />
di errori)<br />
• Unica piattaforma per vari linguaggi (già presenti<br />
nella versione 2012: Visual Basic, C++, C#)<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Versioni .NET Framework (1)<br />
• Framework 2.0: è associato a Visual<br />
Studio 2005.<br />
• Framework 3.0: nasce con Windows<br />
Vista. Non è associato a sistemi di<br />
sviluppo.<br />
• Con Visual Studio 2008 si ha a<br />
disposizione la versione del<br />
Framework 3.5. Quest’ultima<br />
integra entrambi i precedenti<br />
framework con l’aggiunta di<br />
operatività specifiche<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Versioni .NET Framework (2)<br />
Framework 4.0<br />
Architettura a strati fra il sistema<br />
operativo e le applicazioni<br />
Common language routine: fa la<br />
maggior parte del lavoro<br />
Libreria di classi di base: fornisce<br />
tutti gli oggetti .NET che posso<br />
essere usati all’interno del codice<br />
utente<br />
Struttura standalone, mentre i<br />
framework precedenti erano<br />
incrementali, tutte le strutture<br />
sono nuove.<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Versioni .NET Framework (3)<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Namespace (1)<br />
• Gruppo di classi, interfacce e strutture<br />
funzionalmente correlate.<br />
• Contiene: classi, interfacce, tipi di dati e<br />
altri namespace<br />
• Organizzati in modo gerarchico<br />
• System: contiene l’intero framework<br />
• Per usare le classi di un namespace è<br />
necessario importarlo nell’applicazione<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Namespace (2)<br />
• System.Data: classi di base di ADO.NET<br />
• System.Data.Common: classi per accedere<br />
a una fonte di dati e per mantenere la<br />
sincronizzazione dei dati sconnessi con il<br />
DataAdapter<br />
• System.Data.Sqlclient: classi specifiche<br />
del SQL Server .NET Data Provider (per SQL<br />
Server 7 o successivi)<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Namespace (3)<br />
• System.Data.OleDb: classi specifiche per i<br />
DBMS Microsoft precedenti a SQL server 7<br />
• System.Data.SqlTypes: classi per i dati<br />
nativi del SQL server<br />
• System.Xml: classi per gestire e<br />
interfacciare il formato XML<br />
• System.Xml.Schema: classi per processare<br />
l’XML Schema Definition Language (XSD)<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Namespace (4)<br />
• System.Xml.Serialization: classi per<br />
sincronizzare gli oggetti di rappresentazione<br />
relazionale dei dati (DataSet) con gli oggetti<br />
specifici della rappresentazione in formato<br />
XML (XmlDataDocument)<br />
• System.Xml.Xsl: classi per la<br />
trasformazione dei file XML secondo le<br />
specifiche dei file XSL<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
ADO.NET<br />
• Fornisce classi per l’accesso ai dati integrate con il<br />
framework .NET e quindi, facilmente fruibili in fase di<br />
progettazione<br />
• Fortemente integrato con il formato XML<br />
• Gestione efficiente dei dati anche quando<br />
l’applicazione è disconnessa dalla fonte dei dati<br />
• Modello di programmazione comune a fonti di dati di<br />
tipo diverso<br />
• Consente di rappresentare dati sia di tipo relazionale<br />
sia di tipo gerarchico<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
.NET Data provider (1)<br />
• Strato di accesso ai dati in modo<br />
connesso (alla fonte di dati)<br />
• Comunicazione con il Managed Provider<br />
• Specifico per SQL server (per SQL server 7<br />
e successivi)<br />
• Specifico per OLE DB (per SQL server<br />
precedenti al 7 ed Access)<br />
• Generico per ODBC (per tutti i DBMS per<br />
cui è disponibile un driver ODBC)<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
.NET Data provider (1)<br />
• Solo nel primo la comunicazione è diretta.<br />
• Negli altri due si deve passare attraverso un<br />
Managed Provider specifico per la fonte dei<br />
dati:<br />
• Ogni Data Provider ha associato un proprio<br />
DataAdapter che<br />
• Popola le strutture dati all’interno delle<br />
applicazioni<br />
• Sincronizza la fonte di dati esterna con i<br />
cambiamenti dei dati causati all’interno<br />
dell’applicazione<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Dataset<br />
• Versatile contenitore di informazioni<br />
organizzato in modo da poter accogliere al<br />
suo interno le strutture di dati elementari<br />
collegate tra loro da apposite relazioni<br />
• Dentro un dataset possiamo trovare:<br />
• DataTable: tabelle con righe (DataRow) e colonne<br />
(DataColumn)<br />
• DataRelation: oggetti per la gestione relazionale<br />
dei dati in modalità disconnessa<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
DataSet e XML<br />
• Leggere XML per popolare DataTable<br />
• Creare DataTable nuovi<br />
• Scrivere in file XML dati delle DataTable<br />
• Scrivere schemi XML per riprodurre le<br />
strutture dati contenute nelle DataTable e<br />
nelle DataRelation<br />
• Gestione e manipolazione dati direttamente in<br />
formato XML con la sincronizzazione<br />
dell’oggetto XmlDataDocument<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Microsoft SQL Server 2012<br />
• DataBase di tipo relazionale<br />
• Vari formati<br />
• SQL server 2012 Express (gratuito)<br />
• Visual Studio 2013 Express (gratuito ma limitato e diviso<br />
nei diversi linguaggi)<br />
• DIBRIS è abbonato a MSDN Accademic Alliance e può<br />
distribuire strumenti di sviluppo e sistemi operativi ai<br />
propri studenti<br />
• Scrivere al docente per richiedere di ricevere la password<br />
per scaricare questi software.<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Connection di ADO.NET<br />
• Consente di creare un link fra il DBMS e<br />
un’applicazione per usare questi dati<br />
• Oggetto del .NET Data Provider<br />
• Managed Provider: driver scritto per il .NET<br />
per accedere a una fonte di dati ben definita<br />
• Tre tipi di connessioni<br />
• SqlConnection: accede a SQL server 7 o superiori<br />
• OleDbConnection: accede a SQL precedenti e<br />
Access<br />
• OdbcConnection: accede a tutti i DBMS per cui è<br />
disponibile un driver ODBC<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Gestione della connessione<br />
• Connessione attiva solo per il tempo<br />
strettamente necessario ad eseguire le<br />
operazioni di accesso ai dati<br />
• Creazione dell’oggetto Connection<br />
• Costruzione e passaggio della stringa dei<br />
parametri (ConnectionString)<br />
• Apertura della connessione (Open)<br />
• Uso della connessione<br />
• Chiusura della connessione (Close)<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Creazione della connessione<br />
• Importare il suo namespace (dipende<br />
dal tipo)<br />
• Imports System.Data ….. (VB)<br />
• Using System.Data ….. (C#)<br />
• Creazione esplicita con il comando new<br />
• Assegnando a una variabile già creata<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Stringa di connessione (1)<br />
• ConnectionString: informazione necessaria a<br />
effettuare la connessione<br />
• Provider: nome del provider OLEDB (non serve per SQL)<br />
• DataSource: nome del file o del DBMS<br />
• UserID: nome dell’utente autorizzato<br />
• Password: parola d’ordine associata<br />
• Mode: modo di accesso (non per SQL)<br />
• Connection Timeout: tempo massimo per la formazione della<br />
connessione<br />
• Initial Catalog: nome del DB<br />
• Packet Size: dimensioni minime del pacchetto<br />
• Workstation ID: ID del client<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Stringa di connessione (2)<br />
• Si deve dare un valore alla ConnectionString<br />
prima di aprire una connessione con il<br />
metodo Open<br />
• Una volta aperta le proprietà della<br />
connessione diventano read-only<br />
• Prima di cambiare i parametri si deve<br />
chiudere la connessione con il metodo Close,<br />
cambiare i parametri e aprire di nuovo la<br />
connessione<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Altre proprietà di Connection<br />
• Database: nome del database in uso<br />
• Driver: nome della DLL usata in una<br />
connessione ODBC (solo dopo Open)<br />
• ServerVersion: versione dell’istanza SQL<br />
server (solo dopo Open)<br />
• State: stato corrente della connessione<br />
• WorkstationId: Stringa che identifica la<br />
macchina client connessa al DB<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Metodi Open e Close<br />
• Dichiarazione di un oggetto connessione<br />
• Dim myConn as SqlClinet.SqlConnection (VB)<br />
• SqlClient.SqlConnection myConn; (C#)<br />
• Istanzia un oggetto connessione:<br />
• myConn = New SqlConnection()<br />
• Assegnare i valori alla stringa di connessione<br />
• myConn.ConnectionString.DataSource = …<br />
• Apertura della connessione<br />
• myConn.Open<br />
• Esecuzione di operazioni<br />
• Chiusura della connessione<br />
• myConn.Close<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
CreateCommand (1)<br />
• Dichiarazione di un oggetto command<br />
• Dim myCmd as SqlClient.SqlCommand (VB)<br />
• SqlClient.SqlCommand myCmd; (C#)<br />
• Istanziazione<br />
• myCmd = myConn.CreateCommand()<br />
• Assegnazione di un comando SQL<br />
• myCmd.CommandText = “SELECT * FROM Impiegati”<br />
• Dichiarare un oggetto datareader<br />
• Dim myDataReader as SqlClient.SqlDataReader<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
CreateCommand (2)<br />
• Esecuzione dell’oggetto command, il set di dati è assegnato<br />
all’oggetto datareader<br />
• myDataReader = myCmd.ExecuteReader()<br />
• Il metodo Read esegue la letturadi un record dell’oggetto<br />
datareader<br />
• myDataReader.Read()<br />
• Negli Item dell’oggetto datareader ho i campi del record<br />
• Dim nn as String = myDataReader.Item(“Nome”) (VB)<br />
• string nn = myDataReader.Item(“Nome”); (C#)<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Metodo BeginTransaction<br />
• Transaction: singola unità logica di lavoro<br />
comprendente una o più operazioni di lettura e<br />
scrittura su un database.<br />
• Gestione delle transizioni è inserita tra i metodi<br />
open e close della connection<br />
• Sequenza delle operazioni:<br />
• BeginTransaction<br />
• Operazioni di accesso ai dati<br />
• Conferma delle operazioni con Commit<br />
• O<br />
• Annullamento delle operazioni con Rollback<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Esempio (1)<br />
Imports System.Data.SqlClient …<br />
Private Sub GestioneTransizione()<br />
Dim strSQL as String<br />
Dim myConn as SqlConnection<br />
Dim myCmd as SqlCommand<br />
Dim myStrConn as String<br />
Dim myTransaction as SqlTransaction<br />
using System.Data.SqlClient; …<br />
private void GestioneTransizione()<br />
{<br />
string strSQL;<br />
SqlConnection myConn;<br />
SqlCommand myCmd;<br />
string myStrConn;<br />
SqlTransaction myTransaction;<br />
}<br />
VB<br />
C#<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Esempio (2)<br />
Try<br />
myConn = New SqlConnection()<br />
myStrConn = BuildConnectionString()<br />
myConn.ConnectionString() = myStrConn<br />
myConn.Open<br />
myCmd = myConn.CreateCommand()<br />
myCmd.CommandText = “INSERT INTO “ & _<br />
“Impiegati (cognome, nome) “ & _<br />
“VALUES (‘Ferrari’,’Enzo’)”<br />
try<br />
{<br />
myConn = new SqlConnection();<br />
myStrConn = BuildConnectionSring();<br />
myConn.ConnectionString = myStrConn;<br />
myConn.Open();<br />
myCmd = myConn.CreateCommand();<br />
myCmd.CommandText = "INSERT INTO " +<br />
"Impiegati (cognome, nome) " +<br />
"VALUES (‘Ferrari’,’Enzo’)";<br />
VB C#<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Esempio (3)<br />
myTransaction = myConn.BeginTransaction()<br />
myCmd.Transaction = myTransaction<br />
myCmd.ExecuteNonQuery()<br />
myTransaction.Commit()<br />
Catch err as Exception<br />
If Not(myTransaction Is Nothing) _<br />
Then myTransaction.Rollback<br />
MessageBox.Show (err.Message)<br />
Finally<br />
myConn.Close()<br />
End Try<br />
End Sub<br />
myTransaction = myConn.BeginTransaction();<br />
myCmd.Transaction = myTransaction;<br />
myCmd.ExecuteNonQuery();<br />
myTransaction.Commit();<br />
}<br />
catch (Exception err)<br />
{<br />
if !(myTransaction == null)<br />
{<br />
myTransaction.Rollback();<br />
MessageBox.Show(err.Message);<br />
}<br />
}<br />
finally<br />
{<br />
myConn.Close();<br />
}<br />
}<br />
VB C#<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Connection pooling<br />
• L’attivazione di una connessione usa alcuni secondi<br />
• La scalabilità di un sistema può essere<br />
compromessa con un cattiva gestione di questi<br />
tempi di latenza<br />
• Soluzione congelamento delle connessioni rilasciate<br />
in un buffer (pool)<br />
• Se un client richiede la riapertura di una<br />
connessione, già usata, i tempi di attivazione sono<br />
praticamente nulli<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14
Gestione delle connessioni<br />
• Invocare l’apertura il più tardi possibile, solo prima<br />
della lettura/scrittura di dati<br />
• Rilasciare la connessione non appena concluse le<br />
operazioni sui dati (rendere la risorsa disponibile)<br />
• Connessione assegnabile ad altri casi solo se la<br />
stringa di connessione è la stessa<br />
• Connection pooling disabilitabile nella stessa<br />
connection string: Pooling=“false”<br />
• Le connessioni non sono più utilizzabili dopo un<br />
certo periodo di uso<br />
Inf. Med. - 4. ADO.NET - A.A.<br />
2013/14