27.06.2014 Views

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!