sistemi informativi e telemedicina - medinfo

Transcript

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