INFORMATICA MEDICA
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>INFORMATICA</strong> <strong>MEDICA</strong><br />
1. Sistemi Informativi<br />
Prof. Mauro Giacomini
Sommario<br />
• Introduzione ai sistemi informativi<br />
• Differenza fra dati e informazioni<br />
• Concetti generali su database e DBMS<br />
• Ciclo di vita di un sistema informativo<br />
• Tipologie di sistemi informativi<br />
• Architetture client-server<br />
• Applicazioni WEB<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
Introduzione (1)<br />
Information Technology impiegata in tutte le<br />
attività dove si gestiscono dati e informazioni,<br />
anche in ambito sanitario<br />
Ogni volta che si richiede un’informazione al<br />
sistema si effettua una transazione. Questa è<br />
gestita da più sistemi informatici che<br />
dialogano tra loro e che costituiscono il<br />
sistema informativo (SI)<br />
L’uso del sistema informativo garantisce<br />
l’efficienza della gestione di questi dati.<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
Introduzione (2)<br />
• SI progettabile anche senza tecnologie<br />
informatiche<br />
• SI = Sistema per organizzare le<br />
informazioni per renderle fruibili in<br />
modo rapido ed efficiente<br />
• SI - automatizzato<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
Dati e informazioni<br />
Dati ≠ Informazioni<br />
Informazioni:<br />
Rappresentate con dati<br />
Dato interpretabile (non è detto che sia vero)<br />
Dati in un contesto (struttura)<br />
SI organizzano e rendono disponibili<br />
informazioni, per questo accedono ai dati.<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
Database e DBMS (1)<br />
• DB insieme di dati memorizzato<br />
permanentemente su memorie di massa<br />
• SI gestione di dati<br />
• Uso dei file system, svantaggi:<br />
• forte dipendenza fra applicazione e<br />
formato fisico dei dati<br />
• Frequenti riprogrammazioni<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
Database e DBMS (2)<br />
• SI non si interfaccia direttamente col<br />
file system<br />
• Uso del Database Management System<br />
(DBMS)<br />
• DBMS = strato di comunicazione fra<br />
applicazione fra applicazione e file<br />
system<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
Database e DBMS (3)<br />
• Vantaggi:<br />
• Non dipendono dalla struttura<br />
• Accesso logico ai dati<br />
• Mappaggio a carico del DBMS<br />
• Richieste dall’applicazione<br />
• Lettura: DBMS prende di dati dal sistema fisico e li<br />
organizza per la visione logica dell’applicazione<br />
• Scrittura: applicazione scrive strutture logiche distribuite<br />
sul supporto fisico dal DBMS<br />
• Facilità di adeguamento ai cambiamenti<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
Database e DBMS (3)<br />
• Altri vantaggi:<br />
• Protezione all’accesso<br />
• Riduzione di ridondanze e inconsistenze<br />
• Sicurezza e ottimizzazione nell’uso dei dati<br />
• Linguaggi di interrogazione<br />
• Disponibili ad applicazioni e persone<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
Tipi di DBMS<br />
• Differenze nell’organizzazione logica dei<br />
dati<br />
• Relazionali con linguaggio SQL<br />
• Modelli gerarchici<br />
• Modelli reticolari<br />
• DB orientati agli oggetti<br />
• No SQL Database<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
Quando non serve un DBMS<br />
• Piccole quantità di dati<br />
• Interrogazioni semplici<br />
• Dati gestiti solo da una applicazione<br />
• Non è previsto il cambio di piattaforma<br />
Es. file di configurazione dei programmi<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
Utenti di un DBMS: DBA<br />
Database Administrator:<br />
• Responsabile dei dati e di tutto quello<br />
che accade ad essi<br />
• Dispone i permessi di accesso<br />
• Provvede ai backup<br />
• Garantisce prestazioni, sicurezza,<br />
integrità<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
Utenti di un DBMS:<br />
programmatori<br />
Progettisti e sviluppatori<br />
• Scrivono le applicazioni che<br />
interagiscono con il DBMS<br />
• Usano i data management languages<br />
(DML – es. SQL)<br />
• Inseriscono costrutti SQL in programmi<br />
scritti in altri linguaggi<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
Utenti di un DBMS: Designer<br />
Progettisti della base di dati<br />
• Raccolgono le specifiche dell’utente<br />
• Progettano la struttura logica di<br />
memorizzazione<br />
• Indispensabili durante i cambiamenti<br />
della stessa<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
Utenti di un DBMS: Utenti<br />
Due tipi:<br />
• Istituzionali: passano attraverso l’applicazione<br />
sviluppata, hanno scarsa autonomia (scrittura<br />
di semplici query di interrogazione e/o<br />
inserimento)<br />
• Saltuari: hanno la necessità di scrivere query<br />
per specifici problemi che dovessero sorgere<br />
o interrogazioni e viste non previste dai<br />
disegnatori<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
Ciclo di vita (1)<br />
• Studio di fattibilità: bilancio costi<br />
benefici (esperti interni ed esterni).<br />
Risultato: decisione sull’attuabilità<br />
• Acquisizione dei requisiti: gruppo di<br />
analisti ed utenti che raccolgono tutte le<br />
informazioni importanti. Risultato:<br />
documenti sulle funzionalità del sistema<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
Ciclo di vita (2)<br />
• Modellistica dei dati, risultato:<br />
rappresentazione formale ed approvata<br />
delle informazioni che saranno<br />
contenute nella base di dati<br />
• Traduzione in modello logico, team di<br />
analisti, designer e sviluppatori;<br />
risultato: struttura del DB<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
Ciclo di vita (3)<br />
• Sviluppo dell’applicazione che accede ai dati<br />
• Documentazione<br />
• Test (effettuato da utenti istituzionali)<br />
• Fase di esercizio<br />
• Metodi di upgrade (che passano attraverso<br />
alcuni di questi passi)<br />
• Dismissione al sopraggiungere di un nuovo SI<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
Architettura centralizzata<br />
• Tutti i processi sono elaborati dall’host<br />
• I terminali sono meri strumenti per<br />
l’immissione delle richieste e la visualizzazione<br />
dei risultati<br />
• Molto usata (banche, anagrafe, voli…) per la<br />
forte specializzazione e alte prestazioni<br />
• Non adatto per settori in rapido mutamento<br />
• Rapporto prezzo/prestazioni alto<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
Architettura basata su LAN<br />
• Local Area Network (LAN) mette in<br />
comunicazione ad alta velocità molti PC<br />
• Condivisione di risorse<br />
• Flessibile, affidabile, espandibile,<br />
riconfigurabile<br />
• Scarse prestazioni<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
Architettura client-server (1)<br />
• Divisione equa dei compiti tra client e<br />
nodi server<br />
• Applicazioni client (front-end –<br />
interfaccia utente), raccoglie la logica<br />
delle richieste e la gestione dei risultati<br />
• Server (back-end), elabora le richieste e<br />
fornisce i risultati<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
Architettura client-server (2)<br />
• Da client a server: richieste SQL<br />
• Da server a client: insiemi di risposte<br />
(parti di tabelle)<br />
• Pregi:<br />
• Separazione back/front end<br />
• Alternativa ai sistemi proprietari<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
Applicazioni client<br />
• Gestione dell’autenticazione<br />
• Maschere progettate ad hoc per<br />
l’immissione<br />
• Controllo della validità dei dati inseriti<br />
• Gestione dei dati forniti dal server:<br />
display – stampa<br />
• Gestione degli errori<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
Compiti del server<br />
• Controllo della validità e integrità dei dati<br />
• Aggiornamento di tabelle, indici e oggetti<br />
temporanei<br />
• Gestione dell’I/O con il file system<br />
• Gestione delle transazioni<br />
• Esecuzione di query<br />
• Restituzione dei risultati<br />
• Controllo accesi e sicurezza<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
Client-Server a più livelli<br />
• Livello di software intermedio<br />
(middleware) che contiene la logica<br />
della realtà locale (metodi di<br />
fatturazione, di refertazione) in genere<br />
detti oggetti business<br />
• Oggetti client più leggeri e più<br />
controllabili<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
Client-Server a più livelli (2)<br />
• Client indipendenti dal server<br />
• Client colloquia solo col il middleware<br />
• Indipendenza dal linguaggio di sviluppo<br />
• Alto grado di riutilizzo del software<br />
• Punto critico: efficienza della rete<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
Applicazioni web<br />
• Dimora ideale del client-server<br />
• Internet per inviare e ricevere dati<br />
• Enti coinvolti:<br />
• Web browser: contenitore dell’applicazione client<br />
• Client: oggetti attivi contenuti in pagine html<br />
accedono al DBMS via internet<br />
• Web server: consente di accedere alle pagine web<br />
memorizzate sul server<br />
• Application server: strato intermedio, interpreta le<br />
richieste del client e preleva i dati dal DB<br />
• DBMS: contenitore dei dati<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
Applicazioni Web: vantaggi<br />
• Non è necessaria l’installazione<br />
• Si scarica dalla rete e si esegue<br />
localmente<br />
• Con le pagine Web dinamiche la<br />
flessibilità di questi oggetti è aumentata<br />
• Vedremo alla fine del corso qualche<br />
applicazione di ASP.NET (4.0)<br />
Inf. Med. - 1. Sistemi informativi -<br />
A.A. 2013/14
SISTEMI INFORMATIVI E<br />
TELEMEDICINA<br />
2. Modelli dei dati e database<br />
relazionali<br />
Prof. Mauro Giacomini
Sommario<br />
• Schemi e modelli<br />
• Modelli concettuali<br />
• Modelli logici<br />
• Modelli fisici<br />
• Il modello Entità-Relazione<br />
• Nozioni ed operazioni di algebra relazionale<br />
• Trasformazione di uno schema concettuale in uno<br />
relazionale<br />
• Forme normali<br />
• Indici<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Schemi e modelli<br />
Prima di tutto viene l’analisi della realtà di interesse <br />
obiettivo: definire la struttura del database. Processo con<br />
tre passi:<br />
realtà di interesse schema concettuale<br />
schema concettuale schema logico<br />
schema logico schema fisico<br />
Schema: rappresentazione formale della realtà. I processi<br />
per passare da uno schema all’altro sono i modelli.<br />
Modello: un insieme di regole e convenzioni che portano<br />
alla definizione di uno schema.<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Modelli concettuali (semantici)<br />
• Operazione delicatissima<br />
• Influenza tutti passi successivi<br />
• Rappresenta la porzione di mondo da<br />
modellare come vieni vista dall’analista<br />
• Totalmente indipendente da qualsiasi<br />
piattaforma HD/SW e dal DBMS<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Modelli logici<br />
• Consentono di trasformare uno schema<br />
concettuale in uno logico<br />
• Schema logico: collezione di strutture<br />
che rappresentano il database<br />
• Indipendente dall’HD/SW<br />
• Fortemente dipendente dal DMBS<br />
• Ogni DBMS è specializzato per un<br />
particolare modello logico<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Modello relazionale<br />
• Modello logico più diffuso<br />
• Schema = collezione di tabelle e di<br />
relazioni tra tabelle<br />
• Vari DBMS relazionali: Oracle, SQL<br />
Server, Informix Sybase, DB2, MySQL,<br />
MS Access<br />
• Analizzato in seguito<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Altri modelli (1)<br />
• Modello gerarchico: schema ad albero,<br />
relazione unica quella di padre-figlio<br />
• Modello reticolare: schema a forma di reticolo<br />
dove ogni nodo può avere più padri<br />
• Modello orientato agli oggetti: schema<br />
composto da: classi, attributi, associazioni e<br />
aggregazioni con altre classi. DBMS orientati<br />
agli oggetti (Versant, ObjectStore, Poet)<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Altri modelli (2)<br />
• NoSQL Database<br />
• Memorizzazione in strutture diverse dalle<br />
tabelle<br />
• Obiettivi: semplicità nel disegno, scalabilità<br />
orizzontale, controllo fine sulla disponibilità<br />
• Strutture utilizzate: alberi, grafi, chiavevalore<br />
• Applicazioni: big data, real time<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Modelli fisici<br />
• Consentono di trasformare uno schema<br />
logico in uno fisico.<br />
• Schema fisico: descrizione del modo in<br />
cui lo schema logico sarà memorizzato<br />
su una particolare piattaforma HW/SW<br />
• Trasformazione automatica da parte del<br />
DBMS che interagisce con il file system<br />
• Ridotto livello di astrazione<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Modello Entità-Relazione<br />
• Definito da P.P. Chen nel 1976<br />
• Entità: oggetti estrapolati dalla realtà con<br />
caratteristiche proprie rappresentate mediante<br />
attributi<br />
• Definizione di attributi: punto delicato dell’analisi<br />
concettuale<br />
• Importanza degli attributi dipendente dal contesto<br />
• Lettura chiara e intuitiva<br />
• Trasformazione diagramma E-R / schema relazionale<br />
pressoché immediato<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Entità<br />
• Insieme di oggetti della realtà di interesse<br />
• Individuazione delle entità: prima attività della<br />
progettazione concettuale<br />
• Proprietà rappresentate come attributi<br />
• Dati di un’entità sono elementi/occorrenze della base<br />
di dati<br />
• Notazione: rettangolo con il nome della entità<br />
inscritto in esso<br />
• Gli attributi possono essere rappresentati con pallini<br />
esterni al rettangolo o in una diversa sezione del<br />
rettangolo che descrive l’entità<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Caratteristica<br />
• Tipo di entità che assume il proprio<br />
significato solo se messa in<br />
corrispondenza con altre entità.<br />
• Rappresentazione: rettangolo con bordo<br />
laterale doppio e nome inscritto<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Relazione – cardinalità<br />
• Legame fra entità<br />
• Caratteristica principale la cardinalità<br />
• Modello E-R fondamentale nella<br />
documentazione del SW fatto di due parti<br />
• Testo che descrive nel dettaglio le entità con i loro<br />
attributi<br />
• Diagramma (ERD) che evidenzia le relazioni fra le<br />
entità con diverse simbologie<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Esempio di E-R<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Tipi fondamentali di relazioni<br />
• 1:1 due entità E e F sono in relazione 1:1 se e solo<br />
se ad ogni elemento di E può corrispondere un solo<br />
elemento di F e viceversa<br />
• 1:N due entità E e F sono in relazione 1:N se e solo<br />
se ad ogni elemento di E possono corrispondere più<br />
elementi di F, ma ad ogni elemento di F corrisponde un<br />
solo elemento di E<br />
• N:N (molti a molti) due entità E e F sono in relazione<br />
N:N se e solo se ad ogni elemento di E possono<br />
corrispondere più elementi di F, e ad ogni elemento di F<br />
possono corrispondere più elementi di E<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Cardinalità<br />
• Numero o coppia di numeri che nei diagrammi ER<br />
sono posti vicino alla congiunzione della relazione con<br />
la entità<br />
• Possono essere più precise di quelle viste nella slide<br />
precedente indicando anche a volte il numero esatto<br />
• Con 0 si indica l’opzionalità in una relazione, 1 l’unità,<br />
N una generica molteplicità, altri numeri costanti e<br />
noti indicano un vincolo ben preciso su questa<br />
relazione. Alcune volte è usato anche il simbolo di ∞<br />
• Cardinalità ed opzionalità dipendono dal contesto<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Relazioni gerarchiche<br />
• Specificazioni di entità in senso<br />
gerarchico (ISA)<br />
• Meccanismi di ereditarietà<br />
• Esistono anche relazioni ricorsive<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Modello relazionale<br />
• Introdotto da Edward Codd nel 1970<br />
• Basato sul formalismo dell’algebra<br />
relazionale<br />
• Ma dotato di ottime implementazioni<br />
pratiche e di linguaggi di interrogazione<br />
standardizzati (SQL)<br />
• Ampiamente diffuso nell’ambito dei<br />
DBMS<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Relazione algebrica<br />
• Siano A 1 , A 2 , …., A n insiemi. Il prodotto cartesiano tra questi insiemi,<br />
indicato con A 1 x A 2 x ….x A n è definito come l’insieme delle n-ple (a 1 , a 2 ,<br />
...., a n ) dove a 1 A 1 , a 2 A 2 , …., a n A n .<br />
• Una relazione su A 1 , A 2 , …., A n è un sottoinsieme di A 1 x A 2 x ….x A n<br />
• Un insieme vuoto è una relazione<br />
• Gli elementi A 1 , A 2 , …., A n sono domini, i nomi di questi elementi sono<br />
gli attributi e n è il grado della relazione<br />
• Un insieme di occorrenze di un’entità è una relazione algebrica<br />
• Le relazioni algebriche possono essere rappresentate in forma tabellare<br />
• Attributi: colonne della tabella<br />
• Occorrenze: righe della tabella<br />
• In una tabella non ci possono essere righe uguali (le righe sono<br />
elementi di un insieme che non possono essere uguali)<br />
• L’ordine delle righe non ha importanza (l’insieme è per definizione non<br />
ordinato)<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Chiave primaria<br />
• In ogni tabella un insieme di attributi (colonne)<br />
identifica univocamente ogni riga<br />
• Si dice chiave candidata di una relazione R un<br />
insieme non vuoto di attributi K di R tali che:<br />
• È possibile individuare univocamente un’intera riga in base ai<br />
valori degli attributi di k<br />
• La proprietà di cui sopra non è più valida per qualsiasi<br />
sottoinsieme proprio di K<br />
• Dalla definizione di tabella, una candidata chiave<br />
esiste sempre (al massimo considerando tutti gli<br />
attributi)<br />
• Chiave primaria: scelta fra i candidati chiave<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Dal concettuale al logico<br />
• Facili passaggi conducono dal<br />
diagramma E-R (concettuale) allo<br />
schema relazionale<br />
• Le entità del modello E-R si traducono<br />
tutte (tranne rari casi) a tabelle<br />
• Ci sono specifici metodi per elaborare le<br />
diverse relazioni in uno schema logico<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Relazione 1:1<br />
• Introduzione in una delle due tabelle la<br />
chiave dell’altra, o anche in tutte e due.<br />
• Attributo chiave esterna (simbolo FK)<br />
che deriva dalla chiave primaria (PK)<br />
dell’altra tabella<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Relazione 1:N<br />
• Se T e S sono in relazione 1:N il legame<br />
viene creato introducendo tra gli<br />
attributi di S la chiave primaria di T<br />
• Non è possibile il contrario<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Relazione N:N<br />
• Non sono sufficienti le chiavi esterne<br />
• Necessario introdurre una nuova tabella<br />
• Questa nuova tabella I ha come<br />
attributi le chiavi primarie delle tabelle T<br />
ed S (costitutive della relazione)<br />
• Questa nuova tabella può contenere<br />
altri attributi propri della relazione e che<br />
caratterizzano la relazione<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Operazioni dell’algebra<br />
relazionale (1)<br />
• Prodotto: P = T x S, P è ottenuta<br />
concatenando ogni riga di T con tutte quelle<br />
di S<br />
• Proiezione: Data una tabella T e un insieme<br />
di attributi A, la proiezione di T mediante A<br />
restituisce una tabella S con tutte le righe di<br />
T ma con le sole colonne identificate dagli<br />
attributi presenti in A<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Operazioni dell’algebra<br />
relazionale (2)<br />
• Selezione: Data una Tabella T e una<br />
espressione logica E, definita sugli attributi di<br />
T, la selezione di T mediante E restituisce una<br />
tabella S con tutte le colonne di T, ma con le<br />
sole righe di T che soddisfano E<br />
• Ridenominazione: Data una tabella T e un<br />
insieme ordinato di attributi A, la<br />
ridenominazione di T mediante A restituisce<br />
una tabella S con gli stessi attributi di T ma<br />
ridenominati in base agli attributi presenti in<br />
A<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Operazioni dell’algebra<br />
relazionale (3)<br />
• Unione: date due tabelle T ed S, con gli<br />
stessi attributi, l’unione tra T ed S è data<br />
dalla tabella U contenente tutte le righe di T e<br />
di S<br />
• Differenza: date due tabelle T ed S, con gli<br />
stessi attributi, la differenza tra T ed S<br />
restituisce una tabella U contenente tutte e<br />
righe di T non presenti in S<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Operatori derivati (1)<br />
• Join (giunzione): Date due tabelle T ed S con<br />
un dominio comune, ed una condizione A t op<br />
A s , dove A t e A s sono due attributi sul dominio<br />
comune e op un operatore di confronto,<br />
Join(T,S) è una tabella R costruita a partire<br />
da T e S secondo il seguente procedimento<br />
• P1 = T x S<br />
• P2 = Selezione su P1 delle righe per cui (A t op A s )<br />
è vero<br />
• R = P2 con ridenominazione degli attributi comuni<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Operatori derivati (2)<br />
• Natural Join (Giunzione Naturale), se<br />
in un’operazione di Join l’operatore di<br />
confronto è ‘=‘ allora si parla di Natural<br />
Join<br />
• Intersezione: date due tabelle T ed S<br />
con gli stessi attributi, l’intersezione è<br />
una tabella R contenente tutte le righe<br />
comuni a T e a S<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Forme normali<br />
• Normalizzazione: processo matematico<br />
con lo scopo di raffinare lo schema<br />
logico e/o eliminare errori<br />
nell’organizzazione dei dati<br />
• Ci sono fino a 5 procedimenti di<br />
normalizzazione (ma ci si ferma di solito<br />
alla 3° forma normale)<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Prima forma normale<br />
Una relazione è in prima forma normale se non<br />
contiene gruppi ripetitivi, ovvero quando la struttura<br />
è come una raccolta di tuple e attributi. Ciò significa<br />
che ogni relazione non può contenere né ulteriori<br />
relazioni al suo interno, né attributi con più valori<br />
contemporanei (condizione di atomicità degli<br />
attributi). La prima forma normale non permette di<br />
avere un set di valori, una tupla di valori o loro<br />
combinazione, come valore di un attributo di una<br />
singola tupla.<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Dipendenze Funzionali<br />
Le forme normali successive alla prima sono definite a partire dal concetto<br />
di dipendenza funzionale. Data una relazione in 1FN e due sottoinsiemi A e<br />
B dei suoi attributi, si dice che B è funzionalmente dipendente da A (AB)<br />
se per un qualsiasi stato della base di dati ciascun valore di A è associato<br />
ad uno (e solo uno) valore di B. Si ha una dipendenza piena quando la<br />
dipendenza AB è tale per cui non esiste alcun sottoinsieme proprio di A<br />
per il quale valga ancora la dipendenza funzionale con B. Si ha invece<br />
dipendenza parziale, quando la dipendenza è tra un sottoinsieme di A e B.<br />
Si ha dipendenza transitiva tra due attributi (o gruppi di attributi) A e B<br />
distinti, quando esiste un attributo (o un gruppo) C, distinto da A e B, tale<br />
per cui B dipende da C e C dipende da A. Si deduce che ciascun attributo<br />
di una relazione dipende funzionalmente dai candidati chiave della<br />
relazione.<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
II e III Forma Normale<br />
Una relazione è in seconda forma normale se è in 1FN e se<br />
tutti gli attributi non primi (ossia non facenti parte di alcuna<br />
chiave della relazione) dipendono da ogni chiave. La<br />
traduzione in 2NF della relazione viene effettuata<br />
scomponendo la relazione di partenza in più relazioni.<br />
Una relazione è in Terza forma normale se è in 2NF e se ogni<br />
suo attributo dipende in modo diretto e non transitivo da<br />
ogni chiave della relazione.<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Denormalizzazione<br />
• È buona norma lavorare con strutture normalizzate (almeno fino<br />
alla terza forma normale)<br />
• Casi in cui può essere necessario denormalizzare un po’ i dati:<br />
• Quando aggiungendo un attributo ridondante nelle tabelle, è<br />
possibile limitare il numero delle tabelle da visitare per ottenere<br />
particolari risultati<br />
• Quando si aggiunge un attributo che contiene un valore calcolato e<br />
quindi si velocizza l’elaborazione di dati usati di frequente<br />
• Nel caso di attributi denormalizzati sarà l’applicazione a farsi<br />
carico della consistenza degli stessi che non può essere affidata<br />
ai meccanismi automatici del DBMS<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
Indici<br />
• Indice = sequenza di record con almeno due campi:<br />
chiave e indirizzo<br />
• Chiave: contiene i valori della tabella su cui è stato<br />
creato l’indice<br />
• Indirizzo: puntatore all’occorrenza<br />
• Elementi efficienti nella ricerca perché:<br />
• sono più piccoli e semplici di quelli della tabella<br />
• Sono organizzati in particolari strutture che consentono di<br />
effettuare ricerche con prestazioni elevate<br />
• Velocizzano le ricerche ma rallentano gli inserimenti e<br />
le modifiche<br />
Inf. Med. - 2. Modelli dei dati -<br />
A.A. 2013-14
<strong>INFORMATICA</strong> <strong>MEDICA</strong><br />
3. Panoramica su SQL<br />
Prof. Mauro Giacomini
Sommario<br />
• Introduzione<br />
• Istruzione SELECT<br />
• Tipi di Join<br />
• Subquery<br />
• Comandi DML<br />
• Creazione delle tabelle<br />
Inf. Med.- 3. Panoramica su SQL -<br />
A.A. 2013-14
Introduzione<br />
• SQL: linguaggio di interrogazione standard per DBMS<br />
relazionali<br />
• Consente anche: manipolazione dati, riorganizzazione<br />
dati, esecuzione di comandi amministrativi<br />
• Non è un linguaggio di programmazione completo<br />
• Utilizzabile in ambienti di programmazione<br />
• Sono disponibili shell di interpretazione dei comandi<br />
• Nato nei primi anni ’80 sulla spinta di IBM che ne ha<br />
curato anche la standardizzazione, l’ultima versione è<br />
ISO/IEC 9075-2:2003<br />
Inf. Med.- 3. Panoramica su SQL -<br />
A.A. 2013-14
Istruzione SELECT<br />
• Molto flessibile<br />
• Restituisce una tabella temporanea<br />
• Sintassi<br />
• SELECT [ALL|DISTINCT]<br />
• FROM <br />
• [WHERE ]<br />
• [GROUP BY ]<br />
• [HAVING ]<br />
• [ORDER BY [ASC|DESC]]<br />
Inf. Med.- 3. Panoramica su SQL -<br />
A.A. 2013-14
Istruzione SELECT (2)<br />
• SELECT: attributi da selezionare<br />
• FROM: tabelle che contengono gli attributi<br />
di cui sopra<br />
• WHERE: condizione di scelta fra le righe<br />
• GROUP BY: modo di raggruppamento<br />
• HAVING: condizione sui gruppi<br />
• ORDER BY: attributi di ordinamento ASC<br />
cerscente DESC decrescente<br />
Inf. Med.- 3. Panoramica su SQL -<br />
A.A. 2013-14
Proiezione<br />
• Scelta di alcuni attributi da una tabella (*)<br />
• Possibile ridenominazione (AS)<br />
Inf. Med.- 3. Panoramica su SQL -<br />
A.A. 2013-14
Restrizione<br />
• Opera sulle righe<br />
• Ottiene un sottoinsieme delle righe della<br />
tabella<br />
• Dipende dalle condizioni specificate nel<br />
WHERE<br />
• Operatori (, ) e<br />
connettori logici (AND, OR, NOT)<br />
• Operatori BETWEEN, IN, IS NULL<br />
Inf. Med.- 3. Panoramica su SQL -<br />
A.A. 2013-14
LIKE<br />
• Operatore per ricerche flessibili sulle stringhe<br />
• Da usarsi con caratteri speciali<br />
• % una qualsiasi sequenza di caratteri o (*)<br />
• _ un singolo carattere qualsiasi o (?)<br />
Inf. Med.- 3. Panoramica su SQL -<br />
A.A. 2013-14
Operazioni sulle colonne<br />
• Nella lista delle colonne<br />
• Operatori matematici<br />
• Concatenazione di stringhe | o & o +<br />
Inf. Med.- 3. Panoramica su SQL -<br />
A.A. 2013-14
Funzioni scalari di gruppo<br />
• Restituiscono un singolo valore e sono<br />
applicate su insiemi di righe<br />
• Max | Min |AVG | SUM (attributo)<br />
• COUNT ( * | Espressione) con * tutte le<br />
righe, con Espressione conta solo quelle in<br />
cui Espressione è NULL<br />
Inf. Med.- 3. Panoramica su SQL -<br />
A.A. 2013-14
Raggruppamenti<br />
• GROUP BY: raggruppa righe secondo la<br />
lista degli attributi specificata<br />
• HAVING: specifica delle condizioni sui<br />
gruppi formati dagli attributi della<br />
clausola GROUP BY<br />
Inf. Med.- 3. Panoramica su SQL -<br />
A.A. 2013-14
Join<br />
• Prodotto Cartesiano (CROSS JOIN)<br />
• SELECT <br />
• FROM ,<br />
• Giunzione Naturale (NATURAL JOIN)<br />
• SELECT <br />
• FROM ,<br />
• WHERE = <br />
Inf. Med.- 3. Panoramica su SQL -<br />
A.A. 2013-14
Inner Join<br />
• INNER JOIN <br />
• [ON ]<br />
• Non è limitato solo alle connessioni fra<br />
le chiavi<br />
• Non è solo di uguaglianza<br />
• Non è limitato alle sole tabelle connesse<br />
in fasi di costruzione dello schema<br />
Inf. Med.- 3. Panoramica su SQL -<br />
A.A. 2013-14
Outer Join<br />
• SELECT <br />
• FROM [LEFT | RIGHT] JOIN<br />
<br />
• ON <br />
<br />
• = < | > | = | =<br />
• Fornisce tutte le righe anche quelle che<br />
non hanno corrispondenze dal lato<br />
indicato<br />
Inf. Med.- 3. Panoramica su SQL -<br />
A.A. 2013-14
Self Join<br />
• Join che lega due occorrenze presenti<br />
nella stessa tabella<br />
• Come i precedenti, solo che ha bisogno<br />
di due istanze della stessa tabella nel<br />
FROM con la ridenominazione<br />
Inf. Med.- 3. Panoramica su SQL -<br />
A.A. 2013-14
Join su più tabelle<br />
• Come quello su due tabelle<br />
• Non serve che siano collegate<br />
logicamente<br />
• Bastano dei domini comuni a due a due<br />
Inf. Med.- 3. Panoramica su SQL -<br />
A.A. 2013-14
Subquery scalari (1)<br />
• Esempio: selezione di righe sulla base del risultato di<br />
un’altra query<br />
• Def. : una query racchiusa da parentesi () che può<br />
essere inserita in un’altra istruzione SQL,<br />
principalmente come parametro di una sezione di<br />
WHERE<br />
• SELECT matricola, cognome, nome, eta<br />
• FROM Studente<br />
• WHERE eta > (SELECT AVG(eta) FROM studente)<br />
Inf. Med.- 3. Panoramica su SQL -<br />
A.A. 2013-14
Subquery scalari (2)<br />
• Condizioni di uso<br />
• Deve restituire un solo valore<br />
• Deve comparire a destra dell’operatore di<br />
confronto<br />
• Non si possono confrontare due subquery<br />
• Nella subquery non si possono usare<br />
(GROUP BY e HAVING)<br />
Inf. Med.- 3. Panoramica su SQL -<br />
A.A. 2013-14
Subquery e IN (1)<br />
• Con la clausola IN si può controllare in un<br />
insieme, quindi possiamo usare subquery che<br />
restituiscono un vettore (colonna) di dati<br />
• SELECT * FROM Impiegato<br />
• WHERE Impiegato.matricola IN<br />
• (SELECT DISTINCT Familiare.matricola<br />
FROM Familiare Where eta
Subquery e IN (2)<br />
• SELECT DISTINCT *<br />
• FROM Impiegato, Familiare<br />
• WHERE Impiegato.matricola =<br />
Familiare.matricola and<br />
Familiare.eta
Subquery annidate<br />
• SELECT Filiale.*<br />
• FROM Filiale<br />
• WHERE codice IN<br />
• (SELECT codice_filiale<br />
• FROM Tariffa<br />
• WHERE codice_categoria =<br />
• (SELECT codice<br />
• FROM Categoria<br />
• WHERE descrizione = ‘Lusso’)<br />
• AND prezzo
Tipi di linguaggi per il DBMS<br />
• Data Manipulation Language (DML): comandi<br />
per inserire, modificare, cancellare occorrenze<br />
in una tabella<br />
• Data Definition Language (DDL): comandi per<br />
la struttura del DB (creazione/eliminazione di<br />
tabelle/attributi/vincoli/viste)<br />
• Data Control Language (DCL): comandi per il<br />
controllo sui dati, gestione degli utenti, diritti<br />
Inf. Med.- 3. Panoramica su SQL -<br />
A.A. 2013-14
INSERT (1)<br />
• Inserimento di righe in tabelle<br />
• Dati specificati nell’istruzione<br />
• INSERT INTO <br />
• [lista_colonne]<br />
• VALUES <br />
• Es:<br />
• INSERT INTO Studente<br />
• (matricola, cognome, nome)<br />
• VALUES (2523789, ‘Rossi’,’Mario’)<br />
• Corrispondenza 1 a 1 fra lista colonne e lista valori<br />
• Campi non presenti nella lista messi a NULL<br />
• Se non c’è la lista colonne, i valori saranno assegnati ai campi<br />
nell’ordine in cui compaiono nella tabella<br />
• Il valore della chiave primaria deve sempre essere assegnato<br />
Inf. Med.- 3. Panoramica su SQL -<br />
A.A. 2013-14
INSERT (2)<br />
• Accoppiata con una SELECT per<br />
ottenere i dati da inserire<br />
• INSERT INTO Studente_Laureato<br />
• (SELECT * FROM Studente<br />
• WHERE laureato = ‘S’)<br />
• La tabella Studente_Laureato deve<br />
essere già presente e deve avere la<br />
stessa struttura di Studente<br />
Inf. Med.- 3. Panoramica su SQL -<br />
A.A. 2013-14
UPDATE<br />
• Modifica i dati già presenti<br />
• Sintassi<br />
• UPDATE <br />
• SET =<br />
• [{,=}]<br />
• [WHERE ]<br />
• L’espressione può essere anche una<br />
subquery scalare<br />
Inf. Med.- 3. Panoramica su SQL -<br />
A.A. 2013-14
DELETE<br />
• Elimina tutte le righe che rispettano la<br />
condizione scritta nella clausola WHERE<br />
• Sintassi:<br />
• DELETE FROM <br />
• [WHERE ]<br />
Inf. Med.- 3. Panoramica su SQL -<br />
A.A. 2013-14
CREATE TABLE<br />
• Comando per la creazione di tabelle<br />
• Sintassi:<br />
• CREATE TABLE <br />
• ( { <br />
[NOT NULL | CONSTRAINT <br />
PRIMARY KEY | UNIQUE ] [,] } )<br />
Inf. Med.- 3. Panoramica su SQL -<br />
A.A. 2013-14
Tipi di dati<br />
• CHAR (n): sequenza alfanumerica di n caratteri<br />
• CHAR VARYING (n): come sopra ma qui n è un<br />
valore massimo<br />
• DECIMAL (t,f) numero decimale di t cifre di cui f<br />
decimali<br />
• INTEGER numero intero (4 byte)<br />
• SMALLINT intero corto (2 byte)<br />
• FLOAT (n) numero a virgola mobile a precisione<br />
variabile<br />
• REAL / DOUBLE numeri a virgola mobile a precisione<br />
fissa<br />
• DATE<br />
Inf. Med.- 3. Panoramica su SQL -<br />
A.A. 2013-14
Vincoli di integrità<br />
• NOT NULL: attributo obbligatorio<br />
(specificabile anche senza il predicato<br />
CONSTRAINT)<br />
• UNIQUE: valore che deve essere<br />
diverso in tutte le righe<br />
• PRIMARY KEY: indica la chiave primaria<br />
della relazione, indicabile una sola volta<br />
nella creazione della tabella<br />
Inf. Med.- 3. Panoramica su SQL -<br />
A.A. 2013-14
Vincoli di integrità di tabella<br />
• Chiave primaria composta di più attributi<br />
• Da indicarsi alla fine della CREATE TABLE<br />
• CONSTRAINT PRIMARY KEY (<br />
{ [,] } )<br />
• Chiavi esterne<br />
• CONSTRAINT FOREIGN KEY<br />
({ [,] })<br />
REFERENCES <br />
({ [,] })<br />
Inf. Med.- 3. Panoramica su SQL -<br />
A.A. 2013-14
<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
<strong>INFORMATICA</strong> <strong>MEDICA</strong><br />
6. Query<br />
Prof. Mauro Giacomini
Sommario<br />
• Operazioni possibili su un database<br />
• Oggetto Command<br />
• Query di lettura dei dati<br />
• Query di scrittura dei dati<br />
• Query parametriche<br />
• Esempi di query<br />
Inf. Med. - 6. Query - A.A. 2013/14
Tipi di operazioni<br />
• Un’applicazione client-server può fare:<br />
• Operazioni di lettura<br />
• Estrazione di dati puntuali (consultazione o preliminare alla<br />
modifica)<br />
• Estrazione di dati aggregati<br />
• Operazioni di scrittura<br />
• Scrittura di dati puntuali (maschera)<br />
• Scrittura di blocchi di dati (procedure apposite)<br />
• Operazioni di modifica della struttura (ma non effettuate<br />
di solito da applicazioni client-server; fatte dal DBA con<br />
tool specifici)<br />
Inf. Med. - 6. Query - A.A. 2013/14
Oggetto Command (1)<br />
• Tutte le operazioni sul DB non sono effettuate<br />
direttamente sul DB dall’applicazione<br />
• Il client fa la richiesta, il DBMS la esegue<br />
• Il DBMS<br />
• Riceve la richiesta di accesso ai dati<br />
• Controlla la sua correttezza formale<br />
• Esegue la richiesta<br />
• Restituisce esito e risultato<br />
• Esito: se andata o no a buon fine<br />
• Risultato: valori richiesti e/o riassunto (numero di record<br />
modificati/scritti)<br />
Inf. Med. - 6. Query - A.A. 2013/14
Oggetto Command (2)<br />
• Funzioni:<br />
• Trasmissione di richiesta di accesso ai dati<br />
• Riportare alla applicazione esito e risultato<br />
• Tre oggetti di tipo command<br />
• SqlCommand<br />
• OleDBCommand<br />
• OdbcCommand<br />
Inf. Med. - 6. Query - A.A. 2013/14
Creazione di un comando (VB)<br />
• Importazione del Namespace corrispondente<br />
• Imports System.Data.SqlClient<br />
• Dichiarazione / Istanziazione esplicita<br />
• Dim myCmd As New SqlCommand<br />
• Dim myConn as New SqlConnection<br />
• myCmd.Connection = myConn<br />
• Dichiarazione / Istanziazione implicita<br />
• Dim myCmd As SqlCommand<br />
• Dim myConn as New SqlConnection<br />
• myCmd = myConn.CreateCommand<br />
Inf. Med. - 6. Query - A.A. 2013/14
Creazione di un comando (CS)<br />
• Importazione del Namespace corrispondente<br />
• Using System.Data.SqlClient;<br />
• Dichiarazione / Istanziazione esplicita<br />
• SqlCommand myCmd = New SqlCommand();<br />
• SqlConnection myConn = New SqlConnection();<br />
• myCmd.Connection = myConn;<br />
• Dichiarazione / Istanziazione implicita<br />
• SqlCommand myCmd = New SqlCommand();<br />
• SqlConnection myConn = New SqlConnection();<br />
• myCmd = myConn.CreateCommand();<br />
Inf. Med. - 6. Query - A.A. 2013/14
Stringa di Comando (VB)<br />
• CommandText<br />
• Contiene il testo del comando che si vuole eseguire<br />
• Scritto nella sintassi del SQL del DBMS da usare<br />
• Dim myCmd as New SqlCommand (“SELECT * FROM<br />
Impiegati”, myConn)<br />
• O<br />
• Dim myCmd as SqlCommand<br />
• myCmd = myConn.CreateCommand<br />
• myCmd.CommandText = “SELECT * FROM Impiegati”<br />
Inf. Med. - 6. Query - A.A. 2013/14
Stringa di Comando (CS)<br />
• CommandText<br />
• Contiene il testo del comando che si vuole eseguire<br />
• Scritto nella sintassi del SQL del DBMS da usare<br />
• SqlCommand myCmd = New SqlCommand (“SELECT *<br />
FROM Impiegati”, myConn);<br />
• O<br />
• SqlCommand myCmd;<br />
• myCmd = myConn.CreateCommand();<br />
• myCmd.CommandText = “SELECT * FROM Impiegati”;<br />
Inf. Med. - 6. Query - A.A. 2013/14
La connessione<br />
• Proprietà Connection<br />
• La connessione deve essere attiva quando si<br />
leggono/scrivono i dati<br />
• Passa i contenuti a un oggetto DataReader<br />
Inf. Med. - 6. Query - A.A. 2013/14
Tipo di comando<br />
• Si possono passare:<br />
• Stringhe in formato SQL<br />
• Nomi di Stored Procedures<br />
• Proprietà CommandType<br />
• Contiene il tipo con cui interpretare il contenuto della<br />
CommandText<br />
• Valori possibili:<br />
• Text (default): comando SQL<br />
• StoredProcedure: chiamata a una StoredProcedure<br />
immagazzinata nel DBMS<br />
• TableDirect: nome di una tabella (solo per DBMS diversi da<br />
SQLServer)<br />
Inf. Med. - 6. Query - A.A. 2013/14
Tempo di esecuzione<br />
• CommandTimeout: tempo massimo di<br />
esecuzione del comando espresso in<br />
secondi<br />
• Default: 30 secondi<br />
• Passato il tempo massimo si genera un<br />
errore<br />
Inf. Med. - 6. Query - A.A. 2013/14
Esecuzione del comando<br />
• I metodi mandano solo la richiesta al DBMS<br />
• Due gruppi<br />
• ExecuteReader (mette i dati in un oggetto<br />
DataReader), ExecuteXMLReader (che restituisce<br />
i dati in fomto XML)<br />
• ExecuteNonQuery (scrittura)<br />
Inf. Med. - 6. Query - A.A. 2013/14
ExecuteReader<br />
• Un parametro: CommandBehavior<br />
• Valori possibili:<br />
• CloseConnection: connessione chiusa alla fine<br />
dell’uso dell’oggetto DataReader<br />
• SchemaOnly: restituisce solo la struttura dei campi<br />
letti<br />
• KeyInfo: Si aggiunge ai record una colonna con la<br />
chiave primaria dei dati estratti<br />
• SingleResult: restituisce un risultato singolo<br />
• SingleRow: restituisce solo il primo record letto<br />
Inf. Med. - 6. Query - A.A. 2013/14
ExecuteNonQuery<br />
• In CommandText istruzione SQL diversa dalla<br />
lettura<br />
• Possibili solo: scrittura, modifica,<br />
cancellazione, alterazione della struttura del<br />
DB<br />
• Restituisce il numero di record interessati alla<br />
modifica<br />
• Restituisce l’esito del comando<br />
Inf. Med. - 6. Query - A.A. 2013/14
Query parametriche<br />
• Utili per i filtri<br />
• Da mettere nel clausole WHERE o HAVING<br />
• Fondamentali per il riutilizzo del software<br />
• I parametri sono variabili precedute dal simbolo @<br />
mySQL = “UPDATE Impiegati “ & “SET posizione = @posizione, “ & _<br />
“città = @città, “ & “zona = @zona, “ & “WHERE cognome = @cognome “ & _<br />
“AND nome = @nome”<br />
mySQL = “UPDATE Impiegati “ + “SET posizione = @posizione, “ +<br />
“città = @città, “ + “zona = @zona, “ + “WHERE cognome = @cognome “ +<br />
“AND nome = @nome”;<br />
Inf. Med. - 6. Query - A.A. 2013/14
Collection dei parametri (1)<br />
• Proprietà Parameters popolata da oggetti di<br />
tipo Parameter le cui proprietà sono:<br />
• ParameterName: nome del parametro<br />
• DbType: tipo del parametro generico (possibili<br />
valori elencati in System.Data.DbType)<br />
• OleDbType: tipo del parametro specifico per<br />
l’OleDB (connesso internamente a DbType)<br />
• Value: valore assegnato al parametro<br />
Inf. Med. - 6. Query - A.A. 2013/14
Collection dei parametri (2)<br />
• Direction: direzione del parametro (input, output, o<br />
parametro di ritorno di una stored procedure)<br />
• IsNullable: indica se il parametro può accettare un<br />
valore nullo<br />
• Size: grandezza massima in byte del parametro<br />
• Precision: per parametri numerici, numero massimo di<br />
cifre intere<br />
• Scale: per parametri numerici, numero massimo di cifre<br />
decimali<br />
Inf. Med. - 6. Query - A.A. 2013/14
Collection dei parametri (3)<br />
• Metodi propri di tutte le collezioni<br />
• Add: aggiunge un item alla collezione (in questo<br />
caso un parametr)<br />
• Item: consente di riferirsi a un particolare<br />
elemento della collcection (con il nome)<br />
• Insert: inserisce un item<br />
• Remove: rimuove un item<br />
• Clear: svuota tutta la collection<br />
Inf. Med. - 6. Query - A.A. 2013/14
<strong>INFORMATICA</strong> <strong>MEDICA</strong><br />
7. Accesso ai dati<br />
Prof. Mauro Giacomini
Sommario<br />
• Proprietà e metodi dei seguenti oggetti<br />
• DataReader<br />
• DataAdapter<br />
• DataTable<br />
• DataSet<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
DataReader: caratteristiche<br />
• Contiene<br />
• solo una struttura dati alla volta (il risultato di un’unica query)<br />
• i valori di un solo record alla volta<br />
• Solo lettura sequenziale<br />
• no ordinamento<br />
• no accesso casuale<br />
• no cambiamento dei valori nei DB<br />
• Lettura solo connessa<br />
• Ottimizzazione elevata<br />
• Tre tipi per i 3 diversi data provider<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
SqlDataReader: Confronti<br />
• Protocollo di comunicazione col server proprio<br />
dei client di SqlServer Tabular Data Stream<br />
(TDS)<br />
• Assenza di provider intermedi<br />
• Metodi di accesso ai dati che restituiscono i<br />
datatype nativi di SQL Server: minimizzazione<br />
delle perdite di precisione<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
Creazione del DataReader<br />
• Importazione del namespace<br />
• Dichiarazione<br />
• Item: proprietà che restituisce il valore di una<br />
colonna del record dei dati estratti<br />
• Colonna specificata con il nome (nome del campo della<br />
tabella o alias pubblicato nella query) o la posizione<br />
ordinale nel record (si parte da 0)<br />
• FieldCount: proprietà che restituisce il numero dei<br />
campi del record corrente.<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
DataReader: metodi (1)<br />
• Ottiene i dati con il metodo ExecuteReader dell’oggetto Command<br />
• DataReader non contiene i dati estratti, ne consente solo la lettura con il<br />
metodo Read<br />
• Si deve sempre invocare il metodo Read all’inizio per generare il<br />
puntatore ai dati<br />
• Se la lettura ha dato esito positivo il valore di Read è true<br />
• Si legge in un loop da cui si esce quando Read restituisce false<br />
• Close: metodo di chiusura della connessione e dell’oggetto DataReader<br />
stesso<br />
• Chiusura automatica gestita dalla proprietà CommandBehaviour<br />
• GetName: restituisce una stringa contenente il nome della colonna<br />
(indicata con la posizione ordinale), serve per le intestazioni delle tabelle<br />
• GetOrdinal: restituisce un numero indicante la posizione della colonna<br />
all’interno del record (indicata con il nome del campo)<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
Esempio: commenti<br />
• Estrazione dei dati da visualizzare<br />
• Generazione della stringa SQL<br />
• Uso di procedura esterna<br />
• Lettura in un ciclo While<br />
• Identificazione del primo record<br />
• Scrittura dell’intestazione dei dati stessi con un<br />
ciclo For<br />
• Scrittura del contenuto dei campi stessi con un<br />
altro ciclo for più esterno, usando la proprietà item<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
Uso del DataReader: Esempio<br />
• Caricamento di oggetti visuali come ListBox e ComboBox<br />
• Scopo: leggere tutti i record di una tabella e metterne in<br />
nomi nel controllo di tipo lista (vedi routine CaricaListBox)<br />
con il metodo Add della collection Items della lista stessa<br />
• Questa Routine deve essere chiamata dall’evento load della<br />
form<br />
• Gli oggetti di tipo lista possono contenere nella lista degli<br />
items oggetti più complessi del solo nome<br />
• La struttura degli item può essere definita con apposite<br />
classi<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
Definizione delle classi<br />
• Selezionare AddClass dal menu progetto, specificandone il<br />
nome<br />
• Vedi listato di definizione delle classi<br />
• Una proprietà per ogni informazione di dettaglio che si vuole<br />
gestire<br />
• Classe Generale per un oggetto numerico con descrizione<br />
alfanumerica, con due proprietà:<br />
• IdOggetto: codice numerico<br />
• NomeOggetto: descrizione dell’oggetto<br />
• Usata per caricare le ComboBox dei fornitori e delle categorie<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
Definizione delle classi:<br />
Esempio (VB)<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
Definizione delle classi:<br />
Esempio (C#)<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
Caricamento della ListBox<br />
• SQL più articolata per valorizzare la classe<br />
• Per ogni record è creato un nuovo oggetto istanziando la<br />
classe, le cui proprietà sono valorizzate leggendo la<br />
proprietà Item dell’oggetto DataReader<br />
• Si aggiunge il prodotto alla lista con il metodo Add della<br />
collezione Items della lista<br />
• Quello che si vede nella lista è determinato dalla funzione<br />
ToString della classe invocata all’atto della valorizzazione<br />
della proprietà, la sua ridefinizione nella classe fa sì che la<br />
proprietà indicata sovrascriva tutte le altre in fase di<br />
visualizzazione<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
Caricamento delle ComboBox<br />
• Si usano istanze della classe clsOggettoNum<br />
• Vedi il listato di esempio<br />
• Per ogni record è creato un oggetto della classe le cui<br />
proprietà sono valorizzate con gli item del record stesso<br />
• Si aggiunge l’oggetto agli item della ComboBox<br />
• Anche qui una proprietà sovrascrive le altre in fase di<br />
visualizzazione<br />
• Tutte queste procedure devono essere eseguite durante il<br />
load della form<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
Visualizzazione (1)<br />
• Scopo: popolare gli oggetti con i dettagli<br />
dell’Item selezionato<br />
• Nelle TextBox basta l’assegnazione diretta<br />
• Nelle ComboBox va individuato il valore al loro<br />
interno (vedi listato: CercaItemInCombo). Alla<br />
routine si passa l’oggetto in cui cercare (byRef<br />
modificabile) e l’id da cercare (byVal<br />
immodificable)<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
Visualizzazione (2)<br />
• Scopo caricare i dettagli nella form<br />
• Vedi listato CaricaFormCollection<br />
• Generazione dell’oggetto di tipo classe indicato con<br />
l’istruzione CType che converte un oggetto che appartiene<br />
alla collezione degli item della lista in un oggetto della classe<br />
indicata.<br />
• Le proprietà di questo oggetto popolano i record o<br />
direttamente o con la subroutine vista prima<br />
• Questa visualizzazione deve essere innescata dall’evento<br />
SelectedIndexChanged della lista dei prodotti<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
Sequenza di esecuzione<br />
• Alla load sono chiamate le routine di<br />
caricamento di fornitori, categorie e alla fine dei<br />
prodotti<br />
• Quando sono caricati tutti i prodotti la selezione<br />
automatica del primo prodotto della lista fa<br />
scattare l’evento SelectedIndexChanged così<br />
anche gli altri controlli sono caricati<br />
correttamente<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
Modifiche: Aggiornamento<br />
• Creare un nuovo oggetto di tipo classe indicto<br />
• Popolare le proprietà con i nuovi valori digitati negli oggetti<br />
• Eseguire una query di update<br />
• Vedi listato di esempio per la popolazione delle proprietà dell’oggetto classe<br />
indicato<br />
• Di nuovo si usa CType<br />
• Vedi listato di esempio per la scrittura della tabella<br />
• Scrive i parametri della query di update dalle proprietà dell’oggetto classe<br />
indicato<br />
• Chiama la procedura EseguiWriteParametrica<br />
• L’aggiornamento è eseguito alla pressione del tasto aggiorna. Vedi listato:<br />
btnAggiorna_Click<br />
• Dopo l’aggiornamento si deve ricaricare la lista dei prodotti<br />
• Selezionare di nuovo il prodotto modificato per vedere se le modifiche sono state<br />
registrate<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
DataTable – DataColumn (1)<br />
• Contenitore di memoria strutturato in modo del tutto simile<br />
alla tabella di un DB. Non dipende dal DBMS interfacciato.<br />
• Creazione esplicita con il comando new<br />
• Proprietà TableName: nome univoco<br />
• Definizione dei campi che compongono il record: oggetto<br />
DataColumn<br />
• Columns: Proprietà di tipo collection che contiene i campi fra<br />
i quali coloro che costituiscono la chiave primaria<br />
• Creazione esplicita con il comando new<br />
• Proprietà ColumnName: nome univoco in ogni tabella<br />
• Proprietà DataType: ottenuta con il metodo GetType<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
DataColumn (2)<br />
• Possibilità di definire dei vincoli con le proprietà<br />
booleane<br />
• Unique<br />
• AllowDBNull<br />
• La tabella ha una collezione di colonne Columns a<br />
cui la colonna definita e completata può essere<br />
aggiunta con il metodo Add<br />
• Possibile definire una lunghezza massima<br />
MaxLength<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
DataRow<br />
• Definizione ed assegnazione ad una<br />
DataTable per indicarne la struttura<br />
• Accoglie i record da gestire, con la<br />
valorizzazione di tutti i campi<br />
• Quando tutti i campi obbligatori hanno valore<br />
si inserisce la riga nella collezione Rows della<br />
tabella con il comando Add<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
DataAdapter<br />
• Fornisce più funzionalità rispetto a DataReader<br />
• Indicato per estrarre dati da manipolare<br />
• Dipende dal particolare DBMS<br />
• Creazione con New<br />
• Necessita di:<br />
• Comando Valido<br />
• Connessione attiva<br />
• È possibile sia associare a un DataAdapter il comando e la connessione<br />
in due modi<br />
• Associando dei comandi e delle connessioni precedentemente definite<br />
• Passando all’atto della istanziazione due parametri: la stringa di SQL e la<br />
stringa di connessione, in questo secondo caso la connessione sarà<br />
completamente gestita dal DataAdapter<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
DataAdapter e DataTable<br />
• Il metodo Fill riempe un DataTable di cui non si deve<br />
neppure definire la struttura<br />
• Tale tabella rimane in memoria, svincolata dalla conessione<br />
e possiamo scorrerla a piacimento evitando le limitazioni che<br />
avevamo con il DataReader.<br />
• Vedi listato: CaricaListBoxDataTable<br />
• Si scorrono tutte le Row del DataTable e per ogni row si<br />
genera un oggetto del tipo classe indicato<br />
• Anche le ComboBox possono essere riempite con<br />
DataAdapter e DataTable, vedi listato: di esempio<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
DataSet<br />
• DataSet: contenitore di oggetti di tipo<br />
DataTable popolate dall’applicazione<br />
• Questa tabelle possono essere correlate tra<br />
loro con apposite relazioni<br />
• Si riproduce un DB nella memoria<br />
• Non dipende dal DBMS<br />
• Dichiarazione semplice e anche semplice<br />
istanziazione<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
Popolare un DataSet<br />
• Varie possibilità:<br />
• Definire e costruire in modo esplicito gli oggetti DataTable e<br />
aggiungerli al DataSet, definire le relazioni che li legano e popolarli in<br />
un secondo momento leggendo una fonte di dati (anche non<br />
relazionale)<br />
• Usare il metodo Fill dell’oggetto DataAdapter sia per creare sia per<br />
popolare i DataTable del DataSet<br />
• Una libera combinazione dei due metodi precedenti<br />
• Aggiunta di un DataTable a un DataSet è molto semplice:<br />
DataSet ha una collection (Tables) a cui con il metodo Add<br />
posso aggiungere delle DataTable<br />
• Vedi listato CaricaDataSet<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
Commenti<br />
• Tre tabelle nel DB – tre DataTable in un DataSet –<br />
tra stringhe per i tre comandi SQL<br />
• Definizione di un DataSet esplicito<br />
• Un unico DataAdapter da usare per le tre tabelle<br />
• La prima stringa SQL e la stringa di connessione si<br />
passano alla creazione del DataAdapter<br />
• Passando al metodo Fill un DataSet dobbiamo<br />
specificare la Table in cui mettere i dati<br />
• La chiave primaria di ogni tabella viene definita<br />
esplicitamente<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
Creazione delle relazioni<br />
• Necessario istanziare un oggetto DataRelation<br />
• Nel comando di creazione è necessario specificare:<br />
• Il nome della relazione<br />
• Gli oggetti DataColumn coinvolti<br />
• Un valore booleano che indica se la relazione è attiva o<br />
no<br />
• Vedi listato: CreaRelazioni<br />
• 4 DataColumn e 2 DataRelation<br />
• Per ogni relazione: una coppia di DataColumn di<br />
due DataTable diverse<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
Scrittura del DB<br />
• Due fasi:<br />
• La scrittura influenza solo i dati locali<br />
• La conferma copia nel DB<br />
• Vedi Listato di esempio<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
SQLCommandBuilder<br />
• Fornisce in modo automatico le istruzioni SQL necessarie per<br />
trasformare le modifiche su un DataTable in aggiornamenti<br />
effettivi su tabelle del DB.<br />
• Per generare le istruzioni di Insert, Update e Delete l’oggetto<br />
SQLCommandBuilder usa la proprietà SelectCommand per<br />
estrarre un set di dati da confrontare con il DataTable che si<br />
intende aggiorenare<br />
• Da questo confronto l’SQLCommandBuilder crea le istruzioni<br />
SQL che saranno eseguire dall’oggetto dataAdapter.<br />
• Vedi : Conferma aggiornamento<br />
• Annullamento molto semplice: basta invocare il metodo<br />
RejectChanges<br />
Inf. Med. - 7. Accesso ai dati -<br />
A.A. 2013/14
Informatica Medica<br />
11. DataBinding – DataSet – Uso<br />
delle form<br />
Prof. Mauro Giacomini
Sommario<br />
• Tecniche di DataBinding<br />
• Introduzione<br />
• Concetti generali<br />
• DataBinding e navigazione del DataSet<br />
• BindingContext e relazioni tra DataTable<br />
• Esempi di uso<br />
• Uso delle form<br />
Inf. Med. - 11. DataBinding e<br />
DataSet - A.A. 2013/14
DataBinding<br />
• DataBinding: processo che lega un controllo visuale<br />
a una struttura dati di un DataSet.<br />
• Tecnica usata per visualizzare in una form, in modo<br />
rapido ed efficace i contenuti di un DataSet (senza<br />
scrivere codice)<br />
• Consente la sincronizzazione automatica del<br />
contenuto di vari oggetti del form con le rispettive<br />
strutture di dati<br />
• Se controlli si collegano a strutture dati collegate<br />
con le relazioni anche i loro contenuti si aggiornano<br />
automaticamente<br />
Inf. Med. - 11. DataBinding e<br />
DataSet - A.A. 2013/14
DataBinding semplice o<br />
complesso<br />
• Semplice: legame tra una singola<br />
informazione del DataSet e una particolare<br />
proprietà di un controllo (una colonna, una<br />
proprietà text)<br />
• Complesso: legame tra un controllo e una<br />
collection di dati contenuta in una struttura<br />
di DataSet<br />
Inf. Med. - 11. DataBinding e<br />
DataSet - A.A. 2013/14
DataBinding di sola lettura o<br />
anche di scrittura<br />
• Sola lettura: legame per pura<br />
visualizzazione, i cambiamenti non sono<br />
riportati (almeno non in modo<br />
automatico) nel DataSet<br />
• Anche di scrittura: controllo –<br />
interfaccia di scambio dati fra form e<br />
DataSet<br />
Inf. Med. - 11. DataBinding e<br />
DataSet - A.A. 2013/14
BindingContext (1)<br />
• Consente di mantenere la sincronizzazione fra le<br />
informazioni nei controlli e le collection dei dati<br />
• Currency: capacità del BindingContext di<br />
posizionare l’indice di ogni collection in<br />
corrispondenza dell’oggetto correntemente<br />
selezionato all’interno del DataSet.<br />
• Es: alcuni controlli TextBox sono collegati all’oggetto il cui<br />
indice è mantenuto dal BidingContext, se cambia questo<br />
indice tutti i controlli visualizzeranno i dati corrispondenti<br />
Inf. Med. - 11. DataBinding e<br />
DataSet - A.A. 2013/14
BindingContext (2)<br />
• Dependency: capacità di mantenere le<br />
relazioni di dipendenza tra più collection.<br />
• Es: nel DataSet, due DataTable collegate da una<br />
DataRelation; il BidingContext fa si che gli<br />
oggetti collegati al DataTable figlio si aggiornino<br />
automaticamente se cambia l’oggetto<br />
selezionato nel DataTable padre.<br />
Inf. Med. - 11. DataBinding e<br />
DataSet - A.A. 2013/14
Esempi di applicazioni (1)<br />
• Con TextBox (DataBinding semplice):<br />
• txtID.DataBindings.Add(“Text”,myDataSet.Tables(“Farmaci”),<br />
“Id_Farmaco”)<br />
• Con ComboBox (DataBinding complesso):<br />
• Fonte di dati:<br />
• Cmb_Tipi.DataSource=myDataSet.Tables(“Tipi_Farmaci”)<br />
• Campo da visualizzare:<br />
• Cmb_Tipi.DisplayMember= “Tipo_Farmaco”<br />
• Campo legato dal DataBinding:<br />
• Cmb_Tipi.ValueMember= “Id_Tipo_Farmaco”<br />
• DataBinding finale:<br />
• Cmb_Tipi.DataBindings.Add(“SelectedValue”,myDataSet.Tables(“Far<br />
maci”), “Id_Tipo_Farmaco”)<br />
Inf. Med. - 11. DataBinding e<br />
DataSet - A.A. 2013/14
Esempi di applicazioni (2)<br />
• Per sincronizzare l’elemento selezionato nella lista<br />
con i dati degli altri controlli si deve scrivere del<br />
codice da eseguire quando cambia l’indice dell’item<br />
selezionato dalla lista:<br />
• L’indice della nuova posizione viene memorizzato<br />
• La posizione corrente all’interno del BindingContext è<br />
determinata valorizzando la proprietà position<br />
• Controllo di lettura solo sui controlli stessi<br />
• Per terminare la modifica va chiamato il metodo<br />
EndEdit relativo al DataRow individuato all’interno<br />
della DataTable dalla proprietà Position<br />
Inf. Med. - 11. DataBinding e<br />
DataSet - A.A. 2013/14
Aspetti da modificare a mano<br />
• Definire i legami tra i controlli dei form<br />
e i dati del DataSet<br />
• Controllare che la navigazione tra i<br />
controlli del form garantisca la currency<br />
e la depency del BidingContext.<br />
Inf. Med. - 11. DataBinding e<br />
DataSet - A.A. 2013/14
DataGrid<br />
• Consente di navigare all’interno di strutture<br />
complesse rispettando le gerarchie e le<br />
relazioni fra i diversi DataTable<br />
• Navigazione intuitiva con il metodo della<br />
crocetta<br />
• Si può anche bloccare ad una sola tabella<br />
con dichiarazioni esplicite (in questo caso<br />
conviene usare la datagrid view)<br />
Inf. Med. - 11. DataBinding e<br />
DataSet - A.A. 2013/14
Colonne espressioni<br />
• Le colonne di un DataTable possono<br />
contenere anche valori dinamici, calcolati<br />
con formule<br />
• Formula: espressione valida scritta in<br />
sintassi di .NET<br />
• Il testo deve essere assegnato alla proprietà<br />
expression della colonna che conterrà il<br />
valore calcolato<br />
Inf. Med. - 11. DataBinding e<br />
DataSet - A.A. 2013/14
Informazioni nelle colonne<br />
espressioni<br />
• Valori risultanti dal calcolo di dati<br />
contenuti in colonne della stessa tabella<br />
• Valori risultanti dall’aggregazione di<br />
valori contenuti in colonne di record<br />
diversi e di tabelle correlate<br />
• Risultati di operazioni di confronti logici<br />
fra dati contenuti nelle altre colonne<br />
della tabella<br />
Inf. Med. - 11. DataBinding e<br />
DataSet - A.A. 2013/14
L’oggetto Form<br />
La parte fondamentale del disegno di<br />
una qualsiasi applicazione è la<br />
progettazione dell'interfaccia tra il<br />
computer e la persona che lo utilizza.<br />
I componenti fondamentali per la<br />
creazione dell'interfaccia sono i form<br />
e i controlli.<br />
Inf. Med. - 11. DataBinding e<br />
DataSet - A.A. 2013/14
L’oggetto Form<br />
• Il form (letteralmente "forma", "immagine", ma in questo<br />
caso indica genericamente la "finestra" di Windows) è<br />
l'elemento centrale di ogni applicazione<br />
• Un form, infatti, costituisce la base dell'interfaccia utente:<br />
è in un form che vengono inseriti tutti gli altri controlli<br />
siano essi pulsanti, caselle di testo, timer, immagini, ecc.<br />
• Un form è prima di tutto un oggetto e, come tale, dispone<br />
di proprietà che ne definiscono l'aspetto, di metodi e di<br />
eventi che permettono di determinare, tra le altre cose,<br />
l'interazione con l'utente.<br />
Inf. Med. - 11. DataBinding e<br />
DataSet - A.A. 2013/14
L’oggetto Form<br />
Proprietà fondamentali:<br />
• BorderStyle permette di definire l'aspetto del bordo<br />
della finestra. I valori che può assumere sono 7:<br />
None, Fixed Single, Fixed3D, Sizable, Fixed<br />
Dialog, Fixed ToolWindow e Sizable ToolWindow. I<br />
valori più usati sono Sizable (predefinito, vengono<br />
visualizzati tutti i pulsanti, di riduzione ad icona,<br />
ingrandimento e chiusura, nonché la barra del<br />
titolo) e Fixed Dialog (form a dimensione fissa,<br />
vengono visualizzati il pulsante di chiusura e la<br />
barra del titolo).<br />
Inf. Med. - 11. DataBinding e<br />
DataSet - A.A. 2013/14
L’oggetto Form<br />
• Text permette di specificare la stringa da<br />
visualizzare nella barra del titolo del form.<br />
• Icon consente di selezionare l'icona che<br />
contraddistinguerà il form. Per inserire un'icona, è<br />
necessario utilizzare la finestra delle Proprietà e<br />
cliccare sul pulsante con i tre puntini che appare<br />
quando si seleziona la proprietà Icon: così facendo<br />
verrà mostrata la finestra di dialogo Carica icona,<br />
in cui selezionare il file dell'icona (estensione .ICO)<br />
desiderata.<br />
Inf. Med. - 11. DataBinding e<br />
DataSet - A.A. 2013/14
L’oggetto Form<br />
Passiamo ora agli eventi più utilizzati, nell'ordine<br />
in cui vengono generati.<br />
• L’evento Initialize è il primo evento nella vita del<br />
form e si verifica non appena il codice fa<br />
riferimento al nome del form, prima ancora che<br />
vengano creati la finestra e i controlli<br />
• Nella procedura di risposta a questo evento<br />
viene normalmente inserito il codice di<br />
inizializzazione delle variabili del form<br />
Inf. Med. - 11. DataBinding e<br />
DataSet - A.A. 2013/14
L’oggetto Form<br />
Quando si verifica l'evento Load, tutti i<br />
controlli inseriti nel form sono stati creati,<br />
anche se la finestra non viene ancora<br />
visualizzata; è questo, uno degli eventi più<br />
utilizzati, dal momento che di solito<br />
contiene il codice che si vuole venga<br />
eseguito quando si carica un form:<br />
Inf. Med. - 11. DataBinding e<br />
DataSet - A.A. 2013/14
L’oggetto Form<br />
L'evento Resize viene generato<br />
immediatamente prima che il form diventi<br />
visibile ed ogni volta che la finestra viene<br />
ridimensionata, sia trascinando i suoi<br />
bordi, sia ingrandendola, riducendola ad<br />
icona e ripristinandola:<br />
Inf. Med. - 11. DataBinding e<br />
DataSet - A.A. 2013/14
L’oggetto Form<br />
• Un altro evento potrebbe venire provocato prima che il form<br />
diventi pienamente funzionale: l’evento Paint, che non si<br />
verifica se viene impostata la proprietà AutoRedraw del form<br />
a True<br />
• Nella procedura di risposta all’evento Paint viene<br />
generalmente disegnata la grafica del form con metodi quali<br />
Print, Line, Circle, Point Cls e così via.<br />
• La procedura di evento Paint viene eseguita se il form deve<br />
essere aggiornato, quando l’utente ingrandisce il form o ne<br />
scopre nuove aree<br />
• Non si verifica se l’utente restringe il form<br />
Inf. Med. - 11. DataBinding e<br />
DataSet - A.A. 2013/14
L’oggetto Form<br />
• L’evento Deactivate si verifica quando l’utente<br />
passa ad un altro form dell’applicazione. Il form<br />
riceve un evento Deactivate e riceve un altro<br />
evento Activated quando ottiene di nuovo lo stato<br />
attivo.<br />
• La stessa sequenza viene prodotta se viene resa<br />
temporaneamente invisibile un form impostando la<br />
sua proprietà Visible a False o chiamando il suo<br />
metodo Hide<br />
Inf. Med. - 11. DataBinding e<br />
DataSet - A.A. 2013/14
L’oggetto Form<br />
L'evento FormClosing si verifica nel momento in cui<br />
un form sta per essere scaricato, cioè rimosso dalla<br />
memoria. Tale evento può essere utilizzato per<br />
impedire che la finestra venga effettivamente chiusa,<br />
al verificarsi di particolari situazioni, impostando il<br />
parametro Cancel dell'oggetto<br />
FormClosingEventArgs a True, invece l’evento<br />
FormClosed si verifica successivamente e può<br />
essere usato solo per liberare le risorse<br />
Inf. Med. - 11. DataBinding e<br />
DataSet - A.A. 2013/14
L’oggetto Form<br />
• Per rendere visibile un form, si deve richiamare il metodo<br />
Show<br />
• I form espongono una speciale proprietà: Controls,<br />
che restituisce una collection contenete tutti i controlli<br />
caricati sul form al momento.<br />
• Questa collection permette spesso di semplificare il<br />
codice nei moduli form ed è la chiave di alcune tecniche<br />
di programmazione che altrimenti sarebbero impossibili<br />
Inf. Med. - 11. DataBinding e<br />
DataSet - A.A. 2013/14
Informatica Medica<br />
Prof. Mauro Giacomini<br />
Anno Accademico 2013-2014
Sommario<br />
• Importanza a proprietà della transazioni<br />
• Transazioni in ADO.NET<br />
• Concorrenza<br />
• Livelli di isolamento e anomalie<br />
• Locking<br />
• Transazioni annidate<br />
• Savepoint
Importanza delle transazioni<br />
• Transazione: sequenza di operazioni elementari che<br />
hanno un effetto globale su DB<br />
• Una transazione termina con successo se tutte le<br />
operazioni che la compongono terminano con<br />
successo<br />
• Fallimento di una operazione? fallisce tutta la<br />
transazione (stato del DB invariato – sempre coerente)<br />
• comitt: chiusura positiva di tutte le operazioni<br />
• rollback: annullamento di tutte le operazioni
Proprietà delle transazioni<br />
• Atomicità: entità indivisibile di esecuzione (impossibile<br />
lasciare la base di dati in uno stato intermedio)<br />
• Consistenza: non deve violare i vincoli di integrità del DB<br />
(se una operazione causa questo fallisce tutto)<br />
• Isolamento: indipendenza da tutte le altre transazioni, in<br />
modo che la loro esecuzione concorrente porti lo stato del<br />
DB allo stesso punto che una loro esecuzione sequenziale<br />
(serializzazione delle transazioni)<br />
• Persistenza: l’effetto di una transazione chiusa<br />
positivamente (commit) non deve andare perso.
Transazioni in ADO.NET<br />
• Oggetto Transaction: dipende dal provider<br />
(SqlTransaction)<br />
• Metodi:<br />
• BeginTransaction (crea un oggetto Transaction<br />
attivo)<br />
• Commit (conclusione positiva)<br />
• Rollback (conclusione negativa)<br />
• Vedi esempio nel file listati10.txt<br />
• La transazione “avvolge” le normali operazioni di<br />
lavoro sul DB
Transazioni concorrenti (1)<br />
• In ambienti multiutente ci possono essere più transazioni<br />
concorrenti.<br />
• Anomali possibili:<br />
• Letture sporche (dirty read):<br />
Start T1<br />
w(x)<br />
Rollback<br />
Start T2<br />
r(x)<br />
Commit
Transazioni concorrenti (2)<br />
• Letture ripetibili (repeatable read):<br />
Start T1<br />
r(x)<br />
r(x)<br />
Commit<br />
Start T2<br />
w(x)<br />
Commit<br />
• Letture fantasma (phantom read): T1 e T2 concorrenti,<br />
T1 legge delle righe che soddisfano una condizione, T2<br />
aggiunge righe che soddisfano la stessa condizione.<br />
Impossibile la serializzazione.
Livelli di isolamento (1)<br />
• Definisce la “visibilità” che una transazione ha sulle<br />
altre.<br />
• Quattro livelli di isolamento<br />
• Read uncommited: letture sporche, ripetibili e<br />
fantasma, consentite, nessun vincolo sulla visibilità,<br />
nessuna protezione, ma più prestazioni più alte<br />
• Read commited: letture sporche non consentite,<br />
ripetibili e fantasma sì, proibisce la lettura di righe<br />
modificate da transazioni non ancora terminate<br />
(comportamento di default)
Livelli di isolamento (2)<br />
• Repeatable read: letture sporche e ripetibili non<br />
consentite ma fantasma consentite, oltre alle limitazioni<br />
del livello precedente non consente di rileggere righe già<br />
lette e nel frattempo modificate da altre transazioni<br />
concluse con commit<br />
• Serializable: livello di isolamento totale per rendere il<br />
tutto perfettamente serializzabile<br />
• Livello di isolamento (IsolationLevel) passabile<br />
come parametro di inizializzazione del metodo<br />
BeginTransaction.
Locking<br />
• Meccanismo per preservare l’integrità e la consistenza<br />
dei dati<br />
• Lock di lettura (condivisibile)<br />
• Lock di scrittura (esclusivo)<br />
• Politica di bloccaggio dipende dal DBMS<br />
• Individuare che tipo di blocco usare in dipendenza<br />
dell’applicazione scelta (metodo pessimistico e metodo<br />
ottimistico)
Perdita di aggiornamento<br />
• Anomalia write - write<br />
Start T1<br />
r(x)<br />
w(x)<br />
Commit<br />
Start T2<br />
r(x)<br />
w(x)<br />
Commit
Savepoint<br />
• Approccio usato da SQL Server per poter utilizzare le<br />
transazione annidate<br />
• Uso del metodo Save: impostazione di un punto di<br />
salvataggio il cui nome viene passato come parametro<br />
• Il metodo Rollback, nel caso di un suo uso annullerà<br />
tutte le operazioni successive al punto di salvataggio<br />
(che sarà passato anche qui come parametro)
Informatica Medica<br />
Prof. Mauro Giacomini<br />
Anno Accademico 2013-2014
Sommario<br />
• definizione di stored procedure<br />
• stored procedure che restituiscono record<br />
• passaggio di parametri<br />
• stored procedure che NON restituiscono record
Definizione di Stored Procedure<br />
• Una stored procedure è una sequenza di istruzioni SQL<br />
memorizzate in un database server;<br />
• si usa quando le modifiche da apportare ad un DataSet<br />
sono più complesse di un semplice aggiornamento<br />
(per il quale basta un oggetto DataAdapter);<br />
• consentono un maggior livello di sicurezza per il<br />
database;<br />
• possono restituire o meno record.
Stored Procedure che restituiscono<br />
record (1)<br />
• Per invocare una stored procedure occorre creare un<br />
oggetto Command, associarlo ad una connessione,<br />
impostare la proprietà CommandText al nome della<br />
stored procedure e assegnare alla proprietà<br />
CommandType il valore<br />
CommandType.StoredProcedure.<br />
• Poniamo di avere la seguente stored procedure :<br />
Procedure ListaCategorie As<br />
SELECT IDCategoria, NomeCategoria<br />
FROM Categorie
Stored Procedure che restituiscono<br />
record (2)<br />
• Il seguente codice utilizza un oggetto Connection e un<br />
oggetto DataAdapter per invocare la stored procedure<br />
ListaCategorie:<br />
Dim da as New SqlDataAdapter<br />
da.SelectCommand = New SqlCommand()<br />
da.SelectCommand.Connection = Conn<br />
da.SelectCommand.CommandText = “ListaCategorie”<br />
da.SelectCommand.CommandType =<br />
CommandType.StoredProcedure
Stored Procedure che restituiscono<br />
record (3)<br />
• A questo punto per eseguire la stored procedure, è<br />
sufficiente invocare il metodo Fill dell’oggetto<br />
SQLDataAdapter:<br />
da.Fill(Ds, “Categorie”)<br />
• Dopo aver invocato la stored procedure, avremo quindi nel<br />
DataSet Ds un oggetto DataTable individuato dalla stringa<br />
“Categorie” che si può gestire come un qualsiasi DataTable.
Passaggio di parametri (1)<br />
• Usando le stored procedure è possibile passare dei parametri in<br />
modo da personalizzare l’esecuzione della procedura.<br />
• Gli oggetti Parameter rappresentano i valori da passare alla<br />
stored procedure al momento dell’invocazione.<br />
• Le possibili direzioni per i parametri di una stored procedure<br />
sono:<br />
-Input: si inviano valori alla stored procedure<br />
-Output: la stored procedure restituirà un valore in questo<br />
parametro<br />
-InputOutput: possibilità di inviare dei dati alla stored procedure<br />
e ricevere dei risultati<br />
-ReturnValue: indica il parametro in cui la stored procedure<br />
memorizzerà l’eventuale valore di ritorno.
Passaggio di parametri (2)<br />
• L’oggetto Parameter deve avere lo stesso nome e tipo di<br />
dato previsto dalla stored procedure.<br />
• Dopo aver creato l’oggetto Parameter occorre impostare la<br />
sua proprietà direction.<br />
• Poniamo di avere la seguente stored procedure:<br />
Procedure ProdottiPerCategoria(@IDCategoria int)<br />
As<br />
SELECT IDProdotto, Descrizione, CostoUnitario<br />
FROM Prodotti<br />
WHERE IDCategoria = @IDCategoria
Passaggio di parametri (3)<br />
• La stored procedure accetta un parametro di tipo intero che<br />
rappresenta l’identificativo della categoria dei prodotti.<br />
• Vediamo come invocare questa stored procedure nella<br />
nostra applicazione:<br />
da As New SQLDataAdapter(“ProdottiPerCategoria”,<br />
Conn)<br />
da.SelectCommand.CommandType =<br />
CommandType.StoredProcedure<br />
Dim Param As New SQLParameter (“@IDCategoria”,<br />
SQLDbType.Int)<br />
Param.Direction = ParameterDirection.Input<br />
Param.Value = 40
Passaggio di parametri (4)<br />
• A questo punto l’oggetto preparato deve essere associato<br />
alla stored procedure, ciò avviene aggiungendolo alla<br />
collection Parameters dell’oggetto SelectCommand:<br />
Da.SelectCommand.Parameters.Add(Param)<br />
• Se la stored procedure prevede più parametri essi vengono<br />
inseriti nella collection uno dopo l’altro.<br />
• Quindi l’inserimento del risultato della stored procedure in<br />
un DataSet segue l’approccio standard:<br />
Dim Ds as New DataSet<br />
da.Fill(Ds, “Prodotti”)
Stored Procedure che non<br />
restituiscono record (1)<br />
• Le stored procedure possono anche eseguire delle azioni di<br />
modifica, cancellazione o aggiunta di record, quindi senza<br />
restituire nessun insieme di record.<br />
• In questo caso per eseguirle si utilizzano direttamente gli<br />
oggetti Command e il metodo ExecuteNonQuery.<br />
• Poniamo di avere la seguente stored procedure:<br />
Procedure NumeroOrdini(@IDCliente int, @NOrdini<br />
int OUTPUT)<br />
As<br />
SELECT @NOrdini = COUNT(IDOrdine)<br />
FROM Ordini<br />
WHERE IDCliente = @IDCliente
Stored Procedure che non<br />
restituiscono record (2)<br />
Dim cmd as New SQLCommand(“NumeroOrdini”, Conn)<br />
cmd.CommandType = CommandType.StoredProcedure<br />
Dim Param1 as New SQLParameter(“@IDCliente”,<br />
SQDbType.int)<br />
Param1.Direction = ParamDirection.Input<br />
Param1.Value = 12<br />
cmd.Parameters.Add(Param1)<br />
Dim Param2 as New SQLParameter(“@NOrdini”,<br />
SQLDbType.int)<br />
Param2.Direction = ParamDirection.Output<br />
Cmd.Parameters.Add(Param2)<br />
Conn.Open()<br />
cmd.ExecuteNonQuery()<br />
Conn.Close()
Stored Procedure che non<br />
restituiscono record (3)<br />
• Da notare che l’esecuzione del metodo ExecuteNonQuery<br />
richiede che la connessione sia aperta.<br />
• Si può utilizzare direttamente la collection Parameters per<br />
accedere al valore restituito da una stored procedure in un<br />
parametro di output, ad esempio:<br />
n = cmd.Parameters(“@NOrdini”).Value
<strong>INFORMATICA</strong> <strong>MEDICA</strong><br />
15. Usare XML con ADO.NET<br />
Prof. Mauro Giacomini
Sommario<br />
• Relazione fra DataSet e XML<br />
• Sincronizzazione fra DataSet e<br />
XMLDataDocument<br />
• Manipolazione di documenti XML con<br />
XMLDataDocument<br />
Inf. Med. - 15. Uso di XML con<br />
ADO.NET - A.A. 2013/14
DataSet e XML<br />
• Metodi di DataSet per interagire con XML in<br />
lettura e scrittura<br />
• Generare dei file XML per rappresentare<br />
• la struttura del DataSet (schema)<br />
• Il contenuto dei DataTable (contenuto)<br />
• Oppure schema e contenuti assieme<br />
• Leggere file XML per produrre<br />
• Strutture dati all’interno di DataSet<br />
• Caricare dati in una struttura esistente<br />
Inf. Med. - 15. Uso di XML con<br />
ADO.NET - A.A. 2013/14
Metodo WriteXmlSchema<br />
• Metodo della classe DataSet<br />
• Consente di generare un file XML<br />
contenente tutte le informazioni necessarie<br />
a ricreare un DataSet con la stessa struttura<br />
del DataSet che lo ha generato<br />
• Dim ds as New DataSet<br />
• Ds.WriteXmlSchema ()<br />
Inf. Med. - 15. Uso di XML con<br />
ADO.NET - A.A. 2013/14
Filestream<br />
• Oggetto del namespace System.IO che consente di<br />
• scrivere i dati contenuti in una struttura dati (dati in un array ad<br />
esempio) in un file<br />
• Leggere i dati contenuti in un file e trasferirli in una struttura dati<br />
• Da specificare:<br />
• Nome file<br />
• Modo di agire sul file<br />
• Create: crea un nuovo file<br />
• Append: aggiunge alla fine del file<br />
• Open: apertura in lettura<br />
• Dim Fs as New FileStream (strNomeFile, _<br />
FileMode.Create)<br />
Inf. Med. - 15. Uso di XML con<br />
ADO.NET - A.A. 2013/14
XmlTextWriter<br />
• Appartiene al namespace System.Xml ma richiede<br />
anche variabili da System.Text<br />
• Consente di scrivere file espressi in formato Xml<br />
Dim Fs as New FileStream (strNomeFile, FileMode.Create)<br />
Dim Xw as New XmlTextWriter (Fs, Encoding.Unicode)<br />
• Vuole un file stream dove mettere l’uscita e gli<br />
strumenti di codifica<br />
• Può essere passato a un WriteXmlSchema<br />
ds.WriteXmlSchema (xw)<br />
xw.Close<br />
Inf. Med. - 15. Uso di XML con<br />
ADO.NET - A.A. 2013/14
WriteXml<br />
• Si esegue per trasferire in formato XML il contenuto del<br />
dataset.<br />
• Oltre al file dove scrivere si deve indicare anche il<br />
parametro XmlWriteMode<br />
• Valori di XmlWriteMode<br />
IgnoreSchema: scrive solo il contenuto del DataSet senza<br />
informazioni sullo schema<br />
WriteSchema: scrive sia il contenuto del DataSet sia lo schema<br />
DiffGram: scrive il contenuto del DataSet in formato DiffGram<br />
(contenuti originali e quelli correnti)<br />
• In alcuni casi si possono mettere anche solo i cambiamenti:<br />
eseguire il metodo GetChanges del DataSet e poi scrivere<br />
il file XML del DataSet appena generato<br />
Inf. Med. - 15. Uso di XML con<br />
ADO.NET - A.A. 2013/14
Uso di WriteXml<br />
Dim ds as New DataSet<br />
Dim fs as New FileStream (“Schema.xml”, FileMode.Create)<br />
Dim xw as New XmlTextWriter (fs, Encoding.Unicode)<br />
ds.WriteXml (xw, XmlWriteMode.IgnoreSchema)<br />
Oppure<br />
ds.WriteXml (xw, XmlWriteMode.WriteSchema)<br />
Oppure<br />
ds.WriteXml (xw, XmlWriteMode.DiffGram)<br />
xw.Close<br />
Inf. Med. - 15. Uso di XML con<br />
ADO.NET - A.A. 2013/14
ReadXmlSchema<br />
• Consente di leggere un file XML con<br />
informazioni con lo schema di un dataset e<br />
di generare in un DataSet dell’applicazione le<br />
stesse tabelle e le stesse relazioni tra di loro.<br />
• Dim ds As New DataSet<br />
• Dim fs As New FileStream (“Schema.xml”, FileMode.Open)<br />
• Dim xr As New XmlTextReader (fs)<br />
• ds.ReadXmlSchema (xr)<br />
• xr.Close<br />
Inf. Med. - 15. Uso di XML con<br />
ADO.NET - A.A. 2013/14
ReadXml<br />
• Consente di leggere un file XML contenente<br />
dei dati al fine di caricarli in DataTable di<br />
DataSet.<br />
• Se il file XML contiene anche gli schemi il<br />
metodo ReadXml consente di costruire anche<br />
le strutture dati richieste.<br />
• Per questo ReadXml ha un parametro in più:<br />
XmlReadMode<br />
Inf. Med. - 15. Uso di XML con<br />
ADO.NET - A.A. 2013/14
Valori di XmlReadMode (1)<br />
• IgnoreSchema: ignora ogni informazione relativa<br />
allo schema eventualmente contenuta nel file e<br />
carica i dati nei DataTable già presenti nel DataSet<br />
• ReadSchema: Legge le informazioni relative allo<br />
schema contenute nel file, genera i DataTable e<br />
dopo carica i dati in esse. Se il DataSet conteneva<br />
già altre tabelle, il metodo aggiunge quelle<br />
richieste, ma si genera un errore se si cerca di<br />
creare un oggetto già esistente<br />
Inf. Med. - 15. Uso di XML con<br />
ADO.NET - A.A. 2013/14
Valori di XmlReadMode (2)<br />
• InferSchema: ignora le informazioni relative allo<br />
schema nel file e cerca di inferire lo schema dai dati<br />
presenti. Se il DataSet contiene già uno schema, il<br />
metodo aggiunge le tabelle o le colonne<br />
eventualmente necessarie<br />
• DiffGram: serve per leggere un file contenente un<br />
DiffGram. Il DataSet ricevente è aggiornato con le<br />
modifiche riportate nel file.<br />
Inf. Med. - 15. Uso di XML con<br />
ADO.NET - A.A. 2013/14
Valori di XmlReadMode (3)<br />
• Fragment: serve per leggere file XML generati a<br />
seguito dell’esecuzione di query di lettura che<br />
restituiscano i dati in formato XML<br />
• Auto: sceglie il valore più appropriato di questo<br />
parametro in funzione del contenuto del file e dello<br />
stato del DataSet.<br />
Dim ds As New DataSet<br />
Dim fs As New FileStream (“Schema.xml”,FileMode.Open)<br />
Dim xr As New XmlTextReader (fs)<br />
Ds.ReadXml(xr, XmlReadMode.IgnoreSchema)<br />
Inf. Med. - 15. Uso di XML con<br />
ADO.NET - A.A. 2013/14
GetXmlSchema - GetXml<br />
• Sempre metodi del DataSet<br />
• GetXmlSchema: restituisce una stringa con la<br />
rappresentazione in formato XML dello schema del<br />
DataSet<br />
• GetXml: restituisce una stringa con la<br />
rappresentazione in formato XML dei dati del<br />
DataSet (non ha parametri simili a XmlWriteMode,<br />
funziona in modo simile a IgnoreSchema).<br />
• Aggiunta di una form di dettaglio dove in una<br />
textbox vegano visualizzati di risultati delle funzioni<br />
GetXmlSchema e GetXml.<br />
Inf. Med. - 15. Uso di XML con<br />
ADO.NET - A.A. 2013/14
XmlDataDocument<br />
• Oggetto utile per mantenere la sincronizzazione tra<br />
la rappresentazione relazionale dei dati (DataSet) e<br />
quella gerarchica (XML)<br />
• Del namespace System.Xml<br />
• Per caricare<br />
Dim xd As New XmlDataDocument<br />
xd.load(“f1.xml”)<br />
• Per specificare un legame a un DataSet già<br />
istanziato e popolato<br />
• Dim xd As New XmlDataDocument (ds)<br />
Inf. Med. - 15. Uso di XML con<br />
ADO.NET - A.A. 2013/14
Esempio di sincronizzazione<br />
• Se non c’è il DataSet, va creato, sincronizzarlo con il<br />
XmlData e popolare solo uno dei due oggetti<br />
Dim ds As New DataSet<br />
Dim xd As New XmlDataDocument (ds)<br />
xd.load(“file.xml”)<br />
Oppure<br />
Dim ds As New DataSet<br />
Dim xd As New XmlDataDocument<br />
xd.load(“file.xml”)<br />
ds=xd.DataSet<br />
Inf. Med. - 15. Uso di XML con<br />
ADO.NET - A.A. 2013/14
XmlNode<br />
• Tag: elemento più semplice di un file XML<br />
• XmlNode: unità elementare di<br />
XmlDataDocument<br />
• Contiene sostanzialmente un record della<br />
tabella<br />
• Diversi tipi di nodi<br />
• Proprietà XmlNodeType<br />
Inf. Med. - 15. Uso di XML con<br />
ADO.NET - A.A. 2013/14
XmlNodeType (valori - 1)<br />
• Attribute: tag attributo, può essere seguito da un<br />
child di tipo text, non è child di nulla<br />
• Comment: commento nel testo xml, non ha child,<br />
può essere child di oggetti di tipo Document e<br />
Element<br />
• Document: identifica l’intero documento, può essere<br />
seguito da: element, xmlDeclaration, Comment<br />
• DocumentFragment: frammento di documenti, può<br />
essere seguito da: element, xmlDeclaration,<br />
Comment<br />
Inf. Med. - 15. Uso di XML con<br />
ADO.NET - A.A. 2013/14
XmlNodeType (valori - 2)<br />
• Element: elemento di inizio di una struttura, può<br />
essere seguito da Element, Comment, Text<br />
• EndElement: indica la fine di un elemento<br />
• Text: testo contenuto in un nodo, non ha figli, può<br />
essere figlio di Attribute, Element o<br />
DocumentFragment<br />
• XmlDeclaration: dichiarazione dello standard XML<br />
usato. Primo nodo di un documento.<br />
Inf. Med. - 15. Uso di XML con<br />
ADO.NET - A.A. 2013/14
La sicurezza nelle comunicazioni<br />
fra PC<br />
Informatica<br />
Prof. Mauro Giacomini<br />
A.A. 2013-2014
Sommario<br />
• Cosa significa sicurezza?<br />
• Crittografia<br />
• Integrità dei messaggi e firma digitale<br />
• Autenticazione<br />
• Distribuzione delle chiavi e certificazione<br />
• Livello applicativo: e-mail sicura<br />
• Livello di trasporto: commercio Internet, SSL….<br />
• Strato di rete: sicurezza IP<br />
• Strumenti di sicurezza i firewall
Obiettivi<br />
• Disponibilità<br />
– Rendere disponibili a ciascun utente abilitato le informazioni alle quali ha<br />
diritto di accedere, nei tempi e nei modi previsti.<br />
• Riservatezza<br />
– Nessun utente deve poter ottenere o dedurre dal sistema informazioni che<br />
non è autorizzato a conoscere.<br />
• Integrità<br />
– Impedire la alterazione diretta o indiretta delle informazioni, sia da parte di<br />
utenti e processi non autorizzati, che a seguito di eventi accidentali.<br />
• Autenticazione<br />
– Ciascun utente deve poter verificare l’autenticità delle informazioni.<br />
• Non ripudiazione<br />
– Nessun utente deve poter ripudiare o negare messaggi da lui spediti o<br />
firmati.
Tipi di intruso<br />
• Intruso passivo: legge il messaggio senza<br />
alterarlo (es. password)<br />
• Intruso attivo:<br />
– Può alterare il messaggio<br />
– Può inviare messaggi falsi spacciandosi presso il<br />
ricevente per il mittente autentico
Minacce alla sicurezza<br />
• Packet sniffing:<br />
– Evidente in mezzi condivisi<br />
– Un adattatore di rete programmato ad hoc (NIC) legge tutti i<br />
pacchetti in transito<br />
– Tutti i dati non cifrati (es.: password) possono essere letti<br />
• IP Spoofing:<br />
– Un host genera pacchetti IP con indirizzi di sorgente falsi<br />
– Il ricevente non è in grado di stabilire se l’origine dei pacchetti sia<br />
quella autentica<br />
• Denial of service (DoS):<br />
– Flusso di pacchetti “maligni” che sommerge il ricevente<br />
– Distributed DoS (DDoS): attacco coordinato multiplo
Crittografia simmetrica<br />
• Algoritmi in grado di cifrare (trasformare) il testo in<br />
modo da renderlo incomprensibile<br />
– la codifica è funzione di una chiave (segreta).<br />
– l’ operazione di decifratura è relativamente semplice nel<br />
caso in cui si conosca la chiave.<br />
• Se non si conosce la chiave<br />
– risulta molto laborioso ottenere informazioni - anche limitate<br />
- sul messaggio<br />
– dedurre la chiave con cui è stato cifrato un documento<br />
anche conoscendo il testo in chiaro
Sicurezza di un protocollo (1)<br />
• La sicurezza in crittografia è valutata in base alle<br />
risorse di tempo e di calcolo necessarie per dedurre<br />
informazioni<br />
– ogni protocollo crittografico può essere “rotto” con sufficienti<br />
risorse di tempo e calcolo<br />
– se un algoritmo può essere “rotto” usando per 30 anni un<br />
sistema di calcolo del valore di 10 miliardi di Euro allora può<br />
essere sicuro.<br />
• La sicurezza di un algoritmo dipende dal campo di<br />
applicazione.
Sicurezza di un protocollo (2)<br />
• La sicurezza di un protocollo dipende anche dal<br />
numero di possibili chiavi:<br />
• se ci sono molte possibili chiavi allora ci vuole molto<br />
tempo (o molta fortuna) per trovare la chiave<br />
segreta:<br />
• 20 bit (circa 1 milione di diverse chiavi) allora non e’<br />
affatto sicuro<br />
• 56 bit (circa 66 milioni di miliardi diverse chiavi)<br />
andava bene dieci anni fa ma oggi e’ “poco” sicuro<br />
• 512 bit (piu’ di 40000000….0000000000 - 4 seguito<br />
da 153 zeri - diverse chiavi) oggi e’ sicuro; domani?
Sicurezza di un protocollo (3)<br />
• La Crittoanalisi studia le modalità di attacco<br />
dei protocolli crittografici<br />
• Diversi tipi di attacco basati su<br />
– Conoscenza di testo cifrato<br />
– Scelta di testo in chiaro e conoscenza del<br />
corrispondente testo cifrato<br />
– Scelta di testo crittato e conoscenza del<br />
corrispondente testo in chiaro<br />
– Conoscenza testo in chiaro e corrispondente<br />
testo cifrato
Algoritmi di crittografia<br />
• Gli algoritmi di crittografia possono essere classificati<br />
come<br />
– simmetrici, anche detti a chiave segreta (o privata): usano<br />
la stessa chiave per codificare e decodificare<br />
– asimmetrici, anche detti a chiave pubblica: usano due chiavi<br />
distinte: una per codificare e una per decodificare.<br />
• Tutti codificano il testo a blocchi (es. 64, 128 byte)
Data Encryption Standard: DES<br />
• DES codifica blocchi di 64 bit e usa chiavi di 56 bit;<br />
versioni successive (DES triplo) usano 2 o 3 chiavi<br />
da 56 bit (112,168 bit).<br />
• Codifica e decodifica con DES sono veloci; esistono<br />
implementazioni hardware<br />
• Storia<br />
– Maggio 1973: richiesta pubblica per standard<br />
– 1976: Modifica di Lucifer (IBM)<br />
– 1977: viene pubblicato lo standard<br />
– 2001: Advanced Encryption Standard (AES)
Metodi di codifica<br />
• La codifica si basa su permutazione e<br />
sostituzione di parti del testo<br />
• Le operazioni di permutazione e sostituzione<br />
sono ripetute diverse volte con modalità<br />
diverse che dipendono dalla chiave o da parti<br />
di essa<br />
• La lunghezza della chiave è variabile
Problemi con crittografia a chiave<br />
simmetrica<br />
• Richiede che mittente e ricevente abbiano la<br />
stessa chiave segreta<br />
• Come ci si accorda sulla chiave<br />
(specialmente tra computer)? Ci si incontra?<br />
• Nella comunicazione fra n soggetti, si usano<br />
complessivamente O(n 2 ) chiavi<br />
• Bisogna fare attenzione a non usare la<br />
chiave sbagliata
Algoritmi asimmetrici<br />
• Gli algoritmi asimmetrici utilizzano due chiavi distinte<br />
generate insieme:<br />
• La chiave pubblica usata per codificare e può<br />
essere distribuita<br />
• La chiave privata usata per decodificare (deve<br />
essere segreta)<br />
• La stessa chiave pubblica è usata da tutti gli utenti<br />
• Nella comunicazione fra n soggetti, un algoritmo<br />
asimmetrico usa 2n chiavi.<br />
• 1978: Rivest Shamir e Adleman proposero il metodo<br />
RSA, che è ancora oggi il più usato in pratica.
Algoritmi asimmetrici: codifica e<br />
decodifica<br />
Chiave pubblica<br />
Chiave segreta<br />
Documento<br />
Algoritmo<br />
di codifica<br />
Algoritmo<br />
di decodifica<br />
Conoscere la<br />
chiave pubblica<br />
non deve<br />
permettere di<br />
conoscere la<br />
chiave segreta<br />
Documento
RSA: scelta delle chiavi<br />
• Scegli due numeri primi grandi p, q. (es., 1024 bit<br />
ciascuno)<br />
• Calcola n = pq, z = (p-1)(q-1)<br />
• Scegli e (con e
Funzionamento RSA<br />
• Per semplificare il funzionamento immaginiamo che A debba spedire<br />
un messaggio segreto a B. Occorrono i seguenti passaggi:<br />
• B sceglie due numeri primi molto grandi (per esempio da 300 cifre) e li<br />
moltiplica con il suo computer (impiegando meno di un secondo).<br />
• B invia il numero che ha ottenuto ad A. Chiunque può vedere questo<br />
numero.<br />
• A usa questo numero per cifrare il messaggio<br />
• A manda il messaggio cifrato a B, chiunque può vederlo ma non<br />
decifrarlo<br />
• B riceve il messaggio e utilizzando i due fattori primi che solo lui<br />
conosceva lo decifra.<br />
• A e B hanno impiegato pochi secondi a cifrare e decifrare, ma<br />
chiunque avesse intercettato le loro comunicazioni impiegherebbe<br />
troppo tempo per scoprire i due fattori primi, con cui si può decifrare il<br />
messaggio.
RSA: cifratura, decifrazione<br />
• Dati (n,e) e (n,d) calcolati come al punto<br />
precedente<br />
• Per cifrare la stringa di bit corrispondente a<br />
m, calcola<br />
– c= m e mod n<br />
• Per decifrare c, calcola<br />
– m= c d mod n<br />
• Si può dimostrare che:<br />
– m= (m e mod n ) d mod n
RSA: utilizzo in pratica<br />
• Per molte applicazioni RSA è lento: si può usare RSA<br />
con DES (o con altro metodo a chiave segreta)<br />
• Esempio:A invia un messaggio M a B<br />
– Prerequisito: B ha una chiave pubblica nota ad A<br />
– A genera una chiave C, cifra C con RSA (usando la chiave<br />
pubblica di B) e M con DES (con chiave C)<br />
– A invia il documento cifrato con DES e la chiave cifrata con<br />
RSA a B<br />
– B usa la sua chiave privata RSA per conoscere la chiave C e<br />
poi usa DES per ottenere il messaggio.
Firma digitale<br />
• La firma di un documento digitale è una sequenza di<br />
bit che dipende dal documento firmato e dalla<br />
persona che firma<br />
• Chiunque deve poter verificare la validità della firma<br />
• La firma non deve essere falsificabile (le firme<br />
apposte dalla stessa persona su documenti diversi<br />
sono diverse)<br />
• La firma non deve essere ripudiabile (il firmatario<br />
non può negare la sua firma)
Firma digitale con RSA<br />
• Si codifica il documento da firmare con la<br />
chiave privata<br />
• Nota bene: il messaggio è mandato in chiaro<br />
Documento<br />
Chiave privata<br />
RSA<br />
Firma doc.
Firma digitale con RSA: Verifica<br />
Chiunque può<br />
verificare la validità<br />
della firma<br />
La firma può<br />
essere apposta<br />
solo da chi<br />
conosce la chiave<br />
privata<br />
Non falsificabile<br />
Non ripudiabile<br />
Chiave Pub.<br />
di chi firma<br />
Firma doc.<br />
RSA<br />
Documento Docum. originale<br />
Comparazione<br />
= !=<br />
Firma valida<br />
Firma falsa
Impronta di un documento<br />
• Il metodo è lento sia per la firma che per la verifica<br />
(specie su documenti lunghi)<br />
• Richiede la codifica di tutto il messaggio con RSA (o<br />
altro metodo a chiave pubblica)<br />
• Idea: Firmare con la chiave segreta non tutto il<br />
documento ma una sua impronta digitale<br />
• Calcolo impronta digitale documento (es. 512 bit)<br />
• Codifico con la chiave segreta solo l’impronta<br />
• Serve un Algoritmo A per trovare l’impronta digitale di<br />
un documento D calcola una sequenza di bit A(D)<br />
strettamente correlata a D e di lunghezza fissa.
Chiavi garantite?<br />
• Come raggiungere<br />
l’accordo su una chiave<br />
segreta?<br />
• Metodo di Diffie-<br />
Hellman<br />
• Uso di un centro<br />
distribuzione chiavi<br />
(Key Distribution Center<br />
(KDC)) fidato<br />
• Come essere sicuri<br />
dell’autenticità di una<br />
chiave pubblica<br />
ottenuta via Web, e-<br />
mail ecc.?<br />
• Uso di autorità di<br />
certificazione (CA)<br />
fidata
Autorità di certificazione (1)<br />
L'Autorità di certificazione<br />
• garantisce la effettiva corrispondenza di una chiave<br />
pubblica con il soggetto che la espone.<br />
• pubblica, in un apposito registro, certificati firmati<br />
con la propria chiave privata che specificano:<br />
– Il nome dell'Autorità<br />
– La data di emissione del certificato<br />
– La data di scadenza del certificato<br />
– Il nominativo del soggetto<br />
– La chiave pubblica del soggetto<br />
• il momento in cui un documento è stato creato
Autorità di certificazione (2)<br />
• Le chiavi pubbliche possono essere sospese o<br />
revocate (ad es. furto o smarrimento)<br />
• L'Autorità di certificazione gestisce un registro<br />
storico delle chiavi pubbliche revocate,<br />
• I certificati vanno chiesti al momento della verifica<br />
della firma<br />
• Esempio: verifica di un firma<br />
– Si chiede alla CA la chiave pubblica del firmatario al<br />
momento della firma.<br />
– Tale sequenza di operazioni viene svolta in modo<br />
automatico dal software
e-mail sicura (1)<br />
A invia messaggio m e-mail segreto a B<br />
• genera chiave simmetrica casuale KS<br />
• codifica messaggio m con KS<br />
• codifica KS con la chiave pubblica di B<br />
• invia KS(m) e eB(KS) a B.
e-mail sicura (2)<br />
A vuole fornire autenticazione da parte del<br />
mittente dell’integrità del messaggio<br />
• A appone la sua firma digitale al messaggio<br />
• invia il messaggio (in chiaro) e la firma digitale<br />
A vuole fornire confidenzialità, integrità e<br />
autentica da parte del mittente<br />
• Si usano tutti e due i metodi di sopra: Pretty<br />
good privacy (PGP)
Secure Socket Layer (SSL)<br />
• PGP fornisce sicurezza per<br />
una specifica applicazione<br />
• SSL opera sullo strato di<br />
trasporto; fornisce sicurezza<br />
ad ogni applicazione TCP<br />
• SSL: usato fra WWW<br />
browsers, servers per e-<br />
commerce (shttp).<br />
• SSL servizi offerti:<br />
• Autenticazione server<br />
• Codifica dati<br />
• Autenticazione client<br />
(opzionale)<br />
• Autenticazione Server:<br />
• Browser con SSL include<br />
chiavi pubbliche per CA<br />
fidate<br />
• Browser richiede certificato<br />
del server alla CA fidata<br />
• Browser usa la chiave<br />
pubblica della CA per<br />
estrarre la chiave pubblica<br />
del server dal certificato
Sessione SSL crittata<br />
• Browser genera chiave simmetrica di sessione, la codifica con la<br />
chiave pubblica del server e invia la codifica al server<br />
• Server decodifica la chiave di sessione con la sua chiave privata<br />
• Browser e server concordano che messaggi futuri saranno crittati<br />
• I dati inviati nel socket TCP sono codificati con la chiave di<br />
sessione<br />
• SSL: base del livello di trasporto sicuro (Transport Layer Security,<br />
TLS).<br />
• SSL può essere usato anche per altre applicazioni (non Web) ad<br />
es., IMAP.<br />
• L’autentica del cliente può essere fatta in modo analogo (usando<br />
certificati del cliente)<br />
• Uso di chiavi di sessione generate ad hoc permette di limitare l’uso<br />
della chiave pubblica (+ veloce, + sicuro)
Firewall oggi<br />
• Firewall non è un componente della rete ma un<br />
insieme di componenti che cooperano tra loro<br />
• Firewall e Intrusion Detection Systems (IDS)<br />
– Email/web content scanners per virus e malicious code<br />
(worms)<br />
– Personal firewalls<br />
– Firewalls non come prima linea di difesa .. ma l’ultima!
Definizione<br />
• Network Firewalls are devices or systems<br />
that control the flow of network traffic<br />
between networks employing different<br />
security postures. (NIST)<br />
• Firewalls di rete sono apparecchiature o<br />
sistemi che controllano il flusso del traffico di<br />
rete tra due reti con differenti livelli di<br />
sicurezza.<br />
• Un metodo per prevenire accessi non<br />
autorizzati alla rete privata.
Worms e virus<br />
Worms<br />
• Codice che si diffonde da un computer ad un altro<br />
usando una qualche vulnerabilità. Quando un<br />
computer ha un worm si dice “compromesso”. Una<br />
volta compromesso un computer inizierà ad infettare<br />
gli altri.<br />
Virus<br />
• Codice eseguito da un utente che fa qualcosa di<br />
inaspettato rispetto a quello che l’utente prevedeva.<br />
Spesso attachments di posta contengono virus. Un<br />
virus non usa una vulnerabilità del sistema, ma fa<br />
uso dell’utente
Cosa può fare un firewall<br />
• Schermare alcune reti interne e nasconderle agli altri<br />
• Bloccare alcuni accessi a servizi o ad utenti<br />
• Monitorare<br />
Virtual private networks (VPN)<br />
– Crittazione automatica dei dati tra i siti<br />
– Fornisce confidentialità dei dati inviati tra i due gateways<br />
– Le 2 reti appaiono come una singola rete, al di qua del<br />
firewall,<br />
– Buono per reti che si localizzano su più siti e collegate da<br />
una untrusted network (ex: Internet)<br />
– VPN permette l’uso remoto dei servizi locali
Due filosofie<br />
• Default deny:<br />
– Tutto quello che non è espressamente ammesso è proibito<br />
– Servizi sono abilitati caso per caso dopo una attenta analisi<br />
– Utenti sono molto controllati e non possono facilmente<br />
rompere la policy di sicurezza<br />
• Default permit:<br />
– Tutto quello che non è espressamente proibito è ammesso<br />
– System administrator deve reagire prontamente ogni volta<br />
che un nuovo baco su un protocollo viene scoperto<br />
– Servizi sono rimossi/ridotti quando vengono scoperti<br />
pericolosi
La difesa perimetrale<br />
• Proteggi tutti i cammini di ingresso alla rete privata<br />
• Crea una sola porta di ingresso<br />
• All’interno della rete gli host si fidano tra loro
La difesa perimetrale: NAT<br />
• NAT: il network address translation(traduzione degli indirizzi<br />
di rete) è una tecnica che consiste nel modificare gli indirizzi IP<br />
dei pacchetti in transito su un sistema che agisce da router<br />
all'interno di una comunicazione tra due o più host. Viene usato<br />
per permettere ad una rete che usa una classe di indirizzi<br />
privata di accedere ad Internet usando uno o più indirizzi<br />
pubblici. In questo modo si possono anche proteggere gli host<br />
interni nascondendo i propri indirizzi privati (NAT Hiding).<br />
• Static NAT: crea una mappatura permanente uno a uno tra gli<br />
indirizzi IP privati e quelli pubblici<br />
• Dynamic NAT: ad un host interno è assegnato un indirizzo<br />
esterno libero in modo dinamico.
La difesa perimetrale: DHCP<br />
• DHCP: il Dynamic Host Configuration Protocol<br />
(protocollo di configurazione dinamica degli indirizzi)<br />
è un protocollo di rete di livello applicativo che<br />
permette ai dispositivi di una certa rete locale di<br />
ricevere dinamicamente ad ogni richiesta di accesso<br />
la configurazione IP necessaria per poter operare su<br />
una rete più ampia basata su Internet Protocol cioè<br />
interoperare con tutte le altre sottoreti scambiandosi<br />
dati, purché anch'esse integrate allo stesso modo<br />
con il protocollo IP.
La difesa perimetrale: Content<br />
filtering<br />
• Content filtering: is the technique whereby content is<br />
blocked or allowed based on analysis of its content,<br />
rather than its source or other criteria. It is most<br />
widely used on the internet to filter email and web<br />
access. Content filtering is the most commonly used<br />
group of methods to filter spam. Content filters act<br />
either on the content, the information contained in<br />
the mail body, or on the mail headers (like "Subject:")<br />
to either classify, accept or reject a message.
Informatica Medica<br />
Prof. Mauro Giacomini<br />
A.A. 2013-2014
Introduzione<br />
• Protezione dei dati: cuore di molti sistemi sicuri<br />
• Contengono dati vitali per aziende e pubbliche<br />
amministrazioni<br />
• Risorse aziendali preziose da proteggere<br />
• Vari livelli di protezione offerti dai vari DBMS<br />
• Qualche problema ancora aperto
Requisiti di protezione<br />
• Integrità fisica del database<br />
• Integrità logica del database<br />
• Integrità dell’elemento<br />
• Verificabilità<br />
• Controllo degli accessi<br />
• Autenticazione dell’utente<br />
• Disponibilità
Integrità<br />
• Aggiornamenti eseguiti da utenti autorizzati e con<br />
strumenti appropriati<br />
• Protezione dal danneggiamento (sia da azioni<br />
illegali, sia da cause di forza maggiore)<br />
• Due problemi: cancellazione dell’intero DB<br />
(danneggiamento del supporto), singoli dati<br />
illeggibili<br />
• Responsabilità del gestore, del sistema operativo e<br />
del sistema informatico<br />
• Prime soluzioni: backup periodici, registro delle<br />
transazioni
Integrità dell’elemento<br />
• I DBMS devono essere pensati per intercettare e<br />
correggere errori di inserimento<br />
• Metodi:<br />
• Controlli di campo, verifica di valori appropriati<br />
(controlli di tipo)<br />
• Controllo degli accessi e della condivisione (riduzione<br />
della ridondanza)<br />
• Registro delle modifiche
Verificabilità<br />
• Record di verifica di tutti gli accessi in lettura e<br />
scrittura a un DBMS<br />
• Registro delle modifiche<br />
• Accesso in modo incrementale ai dati protetti<br />
• Registro di controlli a livello di record / campo /<br />
elemento<br />
• Accessi a record per sola lettura
Controllo degli accessi<br />
• L’amministratore del DB specifica a chi sono dati i<br />
diritti di fare che cosa<br />
• Il DBMS deve imporre questo criterio, garantendo<br />
l’accesso ai dati autorizzati e negando quello ai dati<br />
non autorizzati<br />
• Numero elevato di modalità di accesso<br />
• Complessità degli accessi dovuta alla correlazione dei<br />
record (inferenza)<br />
• Anche qui la granularità dà i suoi problemi
Autenticazione utente<br />
• Autenticazione utente rigorosa<br />
• Secondo livello di autenticazione oltre a quello del<br />
sistema operativo<br />
• DBMS è obbligato a gestire un proprio sistema di<br />
autenticazione
Disponibilità<br />
• DBMS usa altre risorse HW e SW<br />
• Indicazione della indisponibilità di alcune risorse<br />
• Arbitraggio nell’accesso a risorse condivise<br />
• Controllo per impedire l’inferenza
Aggiornamento in due fasi<br />
• Tecnica<br />
• I fase “dell’intento”: preparazione di tutto ciò che serve<br />
all’aggiornamento senza effettuarlo<br />
• Raccolta dei dati<br />
• Creazione record temporanei<br />
• Apertura file<br />
• Scrittura del flag di commit<br />
• II fase: aggiornamento dei dati nei file definitivi
Ridondanza - coerenza interna<br />
• Informazioni aggiuntive per rilevare le incoerenze<br />
interne dei dati<br />
• Rilevamento degli errori e codici di correzione<br />
• Bit di parità<br />
• Codici di Hamming<br />
• Codici di ridondanza ciclica<br />
• Campi ombra<br />
• Duplicazione di attributi o record interi<br />
• Ripristino<br />
• A seguito della scoperta di un errore si restaura il DB con<br />
gli ultimi dati salvati<br />
• Uso dei dati dei file di controllo
Concorrenza - coerenza<br />
• Accessi multipli devono essere vincolati<br />
• Multiutenza libera in lettura<br />
• Blocco in scrittura: l’intero ciclo interrogazione –<br />
aggiornamento deve essere eseguito come una singola<br />
operazione atomica<br />
• Blocco anche di tutte le operazioni di lettura mentre è<br />
in atto un’operazione di scrittura
Monitor<br />
• Unità del DBMS responsabile dell’integrità strutturale<br />
del DB<br />
• Possibili operazioni del monitor<br />
• Confronto dell’intervallo<br />
• Vincoli di stato: in nessun momento i valori del DB<br />
devono violare questi vincoli<br />
• Vincoli di transazione: condizioni necessarie prima che<br />
sia possibile applicare una modifica al DB
Dati sensibili<br />
• Def: quei dati che non dovrebbero essere resi<br />
pubblici (legge 196/2003)<br />
• Casi semplici:<br />
• Nessun dato sensibile<br />
• Tutti i dati sensibili<br />
• Caso complesso:<br />
• parte dati liberi, parte dati sensibili<br />
• diversi livelli di sensibilità<br />
• In alcuni casi anche la presenza di un certo dato o<br />
meno rende il sistema sensibile, a prescindere dal<br />
contenuto
Fattori di sensibilità<br />
• Sensibili in modo innato<br />
• Provenienti da fonte sensibile<br />
• Dichiarati sensibili<br />
• Parte di un attributo o di un record sensibili<br />
• In relazione di altre informazioni divulgate in<br />
precedenza
Fattori per consentire l’accesso<br />
• Disponibilità dei dati<br />
• Uno o più dati richiesti temporaneamente inaccessibili<br />
(aggiornamento esterno)<br />
• Accettabilità dell’accesso<br />
• Blocco di interi record per non rivelare informazioni<br />
anche indirettamente<br />
• Gestione di dati aggregati<br />
• Garanzia di autenticità<br />
• Accessi solo in fasce orarie<br />
• Controllo sulle richieste
Tipi di divulgazione<br />
• Dati esatti<br />
• Da evitarsi sempre (controllare anche gli errori)<br />
• Confini<br />
• Indicazione di un intervallo all’interno del quale si situa<br />
il dato sensibile<br />
• Controllare che ripetute richieste di questo tipo<br />
consentano l’individuazione del dato esatto<br />
• Risultato negativo<br />
• Indicazione che un dato sensibile è diverso da un valore<br />
indicato (ma anche qui ci sono problemi)
Attacchi indiretti<br />
• Cerca di dedurre il risultato finale sulla base di uno o<br />
più risultati statistici intermedi e di informazioni<br />
esterne<br />
• Somma: di solito serve per avere un risultato negativo<br />
• Conteggio: da abbinarsi alla somma<br />
• Mediana: se ci sono delle intersezioni dei dati al centro<br />
dello spazio, si può determinare il nome o altri dati<br />
sensibili
Possibili soluzioni<br />
• Campione casuale: risultati statistici calcolati solo su<br />
un campione<br />
• Perturbazione casuale dei dati: sui dati aggregati non<br />
si rileva questa perturbazione ma impedisce di arrivare<br />
al dato singolo<br />
• Analisi delle query
Prof. Mauro Giacomini<br />
A.A. 2013-2014
Le WebForm<br />
• Consentono la realizzazione di interi progetti web-oriented<br />
in puro HTML che sono eseguibili su tutti i browser<br />
• La programmazione delle WebForm avviene con un qualsiasi<br />
linguaggio supportato dal CLR<br />
• Progettazione dell’interfaccia visuale a oggetti<br />
• Separazione del codice (gestione eventi) dalla presentazione<br />
(invece nelle versioni precedenti al .NET framework<br />
convivevano nello stesso documento)<br />
• Gestione dello stato della pagina (ovvero registrazione delle<br />
scelte svolte da ogni utente che accede alla pagina Web)<br />
• Integrate con il modello ad eventi di Windows sia per il lato<br />
server sia per il lato client
Creazione di una WebForm<br />
• Sulla WebForm si lavora con una solita form popolata dagli<br />
oggetti tipici delle interfacce con il solito drag and drop (o<br />
meglio con una pianificazione a tabella della pagina)<br />
• Estensione .aspx propria della tecnologia ASP.NET<br />
• Distinzione dei componenti<br />
• Lato server<br />
• Lato client<br />
• Separazione della parte in HTML (interfaccia utente –<br />
estensione .aspx) dalla logica applicativa (scritta in VB.NET –<br />
estensione .vb o in C#, estensione .cs …)
WebForm Designer<br />
• Foglio bianco che raccoglie le componenti dal toolbox<br />
di tipo:<br />
• Tipo WebForm<br />
• Tipo Data<br />
• Tipo Components<br />
• HTML<br />
• Altre possibili componenti se installate ad hoc<br />
• Usuale impostazione delle proprietà degli oggetti
Componenti lato server<br />
• Producono i diversi tipi di output visualizzabile sia<br />
sui diversi dispositivi sia sui browser<br />
• Due insiemi di componenti lato server<br />
• Controlli HTML<br />
• Controlli Web<br />
• Generano le pagine HTML dell’applicazione<br />
• Preservano lo stato della sessione<br />
• Espongono gli eventi necessari alla gestione lato<br />
client
Componenti HTML<br />
• Namespace: System.Web.UI.HtmlControls<br />
• Attivati dalla direttiva runat=“server”<br />
• Es. istanza di HtmlInputText chiamata text1<br />
Gerar<br />
chia<br />
della<br />
classe<br />
HtmlC<br />
ontrol<br />
s
Tag<br />
vs<br />
component<br />
i
Componenti Web<br />
• Namespace: System.Web.UI.WebControls<br />
• Sostanzialmente identici ai controlli della form di VB delle<br />
precedenti versioni<br />
• Sfruttano la tecnologia della piattaforma di ASP.NET<br />
• Componenti complessi es:<br />
• Calendario<br />
• Crystal Report Viewer<br />
• Autoadattamento allo schermo con il browser<br />
• Data-bound capability, sono tutti associabili a una sorgente<br />
di dati (inizializzata e connessa)<br />
• Direttiva runat = “server”
Gerarchia<br />
componenti<br />
Web
Elenco componenti (1)<br />
• Label (testo non modificabile dal client che legge la pagina)<br />
• TextBox<br />
• Testo modificabile (direttamente dal client) e data-bound<br />
• Modalità single-line, multi-line, password<br />
• CheckBox (gestione sì/no)<br />
• RadioButton (gestione sì/no) mutuamente esclusiva<br />
• DropDownList (lista di scelta apribile per selezione singola)<br />
• ListBox (elenco di voci selezionabili anche a gruppi)<br />
• CheckBoxList<br />
• RadioButtonList
Elenco controlli (2)<br />
• Button<br />
• Invia al server dati immessi dal client<br />
• Definizione di eventi<br />
• Link button (simile al button, ma con hyperlink)<br />
• Image button<br />
• HyperLink<br />
• Imagedisplay<br />
• Panel (raggruppa componenti)
Elenco controlli (3)<br />
• Table (contiene strutture tabellari in associazione con<br />
TableRow e TableCell)<br />
• Calendar (visualizzazione di calendario perpetuo)<br />
• Repeater (controllo list-bound connesso a una<br />
sorgente di dati che è visualizzata con controlli<br />
personalizzati con un template HTML)<br />
• DataList (simile al precedente con diverso metodo di<br />
personalizzare il layout)<br />
• DataGrid (connessione ai dati e presentazione in<br />
tabella con possibilità di modifiche direttamente sul<br />
DB)<br />
• AdRotator (visualizza a banner informazioni in XML)
Varie<br />
• Commenti - sintassi<br />
• <br />
• Generazione applicazione Web<br />
• scegliere progetto ASP .NET Web Application<br />
• due facce: design e HTML
Modello degli eventi<br />
• Separazione fra dove si verifica l’evento (client) e dove viene<br />
gestito (server)<br />
• Le informazioni relative all’evento sono catturate sul client<br />
e inviate al server con il protocollo HTTP<br />
• La gestione delle Web form interpreta il messaggio e invoca<br />
la procedura connessa<br />
• Questi meccanismi sono trasparenti nella programmazione<br />
della programmazione ma con l’accorgimento di rispettare<br />
alcuni vincoli per evitare la perdita di efficienza del<br />
programma
Vincoli sugli eventi<br />
• Numero di controlli limitati<br />
• non supportati eventi frequenti es onMouseOver<br />
• versioni speciali di eventi quali onChange<br />
• Gestione differita degli eventi<br />
• controlli server attivati solo da un clic su un pulsante catturati<br />
dal controllo sul client e inviati tutti assieme<br />
• gestione di tutti gli eventi di modifica senza ordine prima e<br />
dopo la procedure di gestione del tasto premuto<br />
• per obbligare l’invio di un evento di modifica prima degli altri<br />
porre AutoPostBack a True<br />
• Distribuzione degli eventi<br />
• controlli complessi (DataList e DataGrid) intercettano gli<br />
eventi dei controlli contenuti e generano un evento generico<br />
ItemCommand con parametri
Procedure d’evento<br />
<br />
Associa all’evento Click la procedura Convalida<br />
Due parametri associati all’evento<br />
• Oggetto che ha generato l’evento<br />
• Oggetto con informazioni specifiche sull’evento (EventArgs) ad<br />
esempio ImageButton genera ImageClickEventArgs con<br />
coordinate<br />
Sub Convalida(src As Object, e As EventArgs)<br />
private void Convalida(object sender, EventArgs e) C#<br />
VB
Eventi delle Web Form<br />
• Page_Init (inizializzazione delle variabili, si crea un’istanza<br />
lato server dell’oggetto Page)<br />
• Page_Load (ogni volta che viene caricata dal runtime di<br />
ASP.NET a causa di una richiesta del browser, si può<br />
cambiare il contenuto dei controlli)<br />
• Page_Unload (ultimo evento di una pagina caricamento di<br />
altra pagina, attività di registrazione in un file di log,<br />
chiusura di file e database, distruzione dell’oggetto Page)
Esempi<br />
Sub Page_Load (src as Object, e as EventArgs)<br />
txtName.Text = “Pippo”<br />
End Sub<br />
Sempre Pippo nella Text ad ogni refresh<br />
Sub Page_Load (src as Object, e as EventArgs)<br />
if not Page.IsPostBack Then<br />
txtName.Text = “Pippo”<br />
end if<br />
End Sub<br />
private void Page_Load(object sender, EventArgs e)<br />
{<br />
txtName.Text = “Pippo”;<br />
}<br />
private void Page_Load(object sender, EventArgs e)<br />
{<br />
if (!(Page.IsPostBack))<br />
txtName.Text = “Pippo”;<br />
}<br />
Solo la prima volta Pippo nella Text
Validazione dell’input<br />
• Lato server<br />
• Più sicura (si può fare sempre)<br />
• Più lenta (necessita di mandare tutti i dati al server)<br />
• Lato client<br />
• Più veloce<br />
• Incerta (l’utente può aver disabilitato gli script)<br />
• Controlli di ASP.NET automaticamente scelgono, se<br />
possibile lato client altrimenti lato server
Sintassi<br />
<br />
Modalità di Visualizzazione<br />
• Static: compare quando si verifica l’errore, ma permane<br />
anche se l’errore è corretto fino al successivo submit<br />
• Dynamic: compare in presenza di errori e scompare se si<br />
risolve il problema anche senza un submit<br />
• None: non visualizza il messaggio, solo lo registra nel<br />
ValidationSummary<br />
• Si possono applicare più controlli di validazione a uno<br />
stesso oggetto, basta indicare tutte le volte che<br />
necessario il nome dell’oggetto da controllare nella<br />
proprietà ControlToValidate.
RequiredFieldValidator<br />
• Controllo di immissione obbligatoria<br />
• Esempio<br />
<br />
<br />
RangeValidator<br />
• Controllo del range del valore inserito (se vuoto, valido)<br />
• Da esplicitare il tipo di variabile<br />
• Tipi possibili: Integer, Double, Currency, Date, String<br />
• Esempio<br />
<br />
<br />
CompareValidator<br />
• Confronto con valore predefinito (ValueToCompare) o valore di un altro controllo (ControlToCompare),<br />
con tipo<br />
• Da indicare l’operatore (Operator), possibili operatori:<br />
• Equal, NotEqual, GreaterThan, GreaterThanEqual, LessThan, LessThanEqual, DataTypeCheck<br />
• Esempio<br />
<br />
<br />
RegularExpressionValidator<br />
• Controllo su uno schema predefinito del dato di ingresso (carta di credito, email, codicefiscale, ecc…)<br />
• Proprietà specifica: ValidationExpression<br />
• Caratteri da utilizzare (vedi pagina successiva)<br />
• Esempio<br />
<br />
<br />
Caratteri per espressioni regolari<br />
(1)<br />
| Consente di specificare valori alternativi<br />
* Specifica 0 o più occorrenze dell’elemento che lo<br />
precede es ba* significa b, ba, baa, baaa, baaaa, …<br />
+ Specifica 1 o più occorrenze dell’elemento che lo<br />
precede es ba+ significa ba, baa, baaa, baaaa, …<br />
? Specifica 0 o 1 occorrenze dell’elemento che lo<br />
precede es ba? significa b o ba<br />
[ ] Consentono di specificare valori alternativi<br />
[aeiou] indica una qualsiasi vocale
Caratteri per espressioni regolari<br />
(2)<br />
\w Indica un qualsiasi carattere alfanumerico compreso<br />
_<br />
\s Indica un qualsiasi carattere di spaziatura<br />
\d Indica un qualsiasi carattere numerico<br />
{} Consente di indicare un numero preciso di occorrenze<br />
o di delimitarne il numero massimo o minimo. Es. a{3}<br />
indica aaa; a{3,} indica le stringhe di almeno tre a; a{,3}<br />
indica da 0 a tre caratteri a; a{3,5} indica aaa, aaaa,<br />
aaaaa.<br />
() Consente di individuare sottostringhe Es:<br />
\w.+(exe|com|bat) indica tutti i possibili eseguibili<br />
DOS
CustomValidator<br />
Consente di definire i vincoli da verificare perché un input<br />
utente sia valido specificando se la convalida vada fatta sul<br />
client (ClientValidationFunction) o sul server<br />
(OnServerValidate). Sul server la validazione inizia con<br />
l’evento ServerValidate a cui è passato il parametro<br />
ServerValidateEventArgs la cui proprietà Value contiene<br />
il valore inserito nel controllo indicato. Il risultato del processo<br />
di validazione viene restituito nella proprietà IsValid dello<br />
stesso parametro.
CustomValidatorEsempio<br />
<br />
<br />
<br />
Sub Convalida (src As Object, e As ServerValidateEventArgs)<br />
If Page.IsValid Then<br />
Msg.Text = “Ok!”<br />
End If<br />
End Sub<br />
Sub NumeroPari (src as Object, e as ServerValidateEventArgs)<br />
Dim num as Integer<br />
num = Integer.Parse(e.Value)<br />
e.IsValid = ((num mod 2)=0)<br />
End Sub<br />
<br />
<br />
<br />
<br />
<br />
void Convalida (object src, ServerValidateEventArgs e)<br />
{<br />
if (Page.IsValid)<br />
Label1.Text = "Ok!";<br />
}<br />
void NumeroPari (object src, ServerValidateEventArgs e)<br />
{<br />
int num;<br />
num = int.Parse(e.Value);<br />
e.IsValid = ((num % 2)==0);<br />
}<br />
<br />
Corpo<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
• Nelle ultime versioni per usare un validator si deve<br />
aggiungere negli appsettings della web config:<br />
Validation Summary (1)<br />
• Se il controllo di validazione intercetta un errore, questo<br />
viene visualizzato al momento di esecuzione del controllo<br />
con modalità indicata dalla proprietà Display.<br />
• Si possono visualizzare tutti questi eventuali messaggi in<br />
un unico punto della pagina con il controllo<br />
ValidationSummary<br />
• La proprietà IsValid dell’oggetto Page è True quando<br />
tutti i controlli di validazione sono stati soddisfatti
Validation Summary (2)<br />
• Se si mette un ValidationSummary sulla Web Form,<br />
quando la proprietà IsValid dell’oggetto Page è<br />
False, vengono automaticamente interrogati tutti i<br />
controlli di validazione e gli eventuali messaggi di<br />
errore sono raccolti e visualizzati nel controllo<br />
ValidationSummary.<br />
• Con il ValidationSummary i messaggi non sono<br />
visualizzati direttamente, a meno che non siano<br />
specificati tra i tag di apertura e chiusa.
ValidationSummary: Proprietà<br />
• DisplayMode: Indica come si visualizzano i messaggi di errore<br />
nella lista. Valori: BulletList, List, SingleParagraph<br />
• HeaderText: Intestazione della lista dei messaggi di errore.<br />
• ShowSummary: Indica se visualizzare o meno la lista dei messaggi<br />
sulla pagina, valore predefinito True.<br />
• ShowMessageBox: Indica se la lista dei messaggi deve essere<br />
visualizzata in una messagebox, valore predefinito False .<br />
• EnableClientScript: Se posta a False la validazione client<br />
side è inibita, togliendo effetto alle impostazioni di<br />
ShowMessageBox.
HTML – XML - XHTML<br />
Prof. Mauro Giacomini<br />
Anno Accademico: 2013-2014
HTML-XML Le origini<br />
SGML<br />
Structured Generalized<br />
Markup Language<br />
XML<br />
eXtensible<br />
Markup Language<br />
HTML<br />
HyperText Markup Language<br />
XHTML<br />
eXtensible HyperText<br />
Markup Language<br />
HL7<br />
Heath Level 7<br />
SOAP<br />
HyperText Markup Language<br />
2/45
HTML - Introduzione<br />
Un documento HTML è strutturato in due parti<br />
fondamentali: l'intestazione e il corpo del documento.<br />
Il corpo del documento contiene tutti gli elementi della pagina:<br />
il testo, le immagini, le applet Java, il codice Javascript e<br />
quant'altro viene materialmente visualizzato dal browser.<br />
L'intestazione contiene una serie di informazioni necessarie al<br />
browser per una corretta interpretazione del documento, ma non<br />
visualizzate all'interno dello stesso.<br />
3/45
HTML – Esempio Struttura<br />
<br />
<br />
<br />
::: Esempio di pagina HTML ::: <br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
4/45
HTML - Introduzione<br />
<br />
Informa il server Web sulla natura di ciò che si sta trattando,<br />
in fase di avvio del documento; a sua volta il server informa il<br />
browser sui tipi di tag che si aspetta di ricevere.<br />
<br />
Idstring è la specifica per la versione di HTML utilizzata nel<br />
documento, dall’esempio precedente:<br />
“HTML PUBLIC -//IETF//DTD HTML 4.01 Transitional//EN"<br />
•HTML PUBLIC: il documento è pubblico<br />
•IETF: il tipo di HTML pubblico è gestito dalla Internet<br />
Engineering Task Force<br />
•DTD HTML 4.01: la versione di HTML supportata è la 4.01<br />
•EN: la lingua del documento è l'inglese<br />
5/45
HTML - Introduzione<br />
….<br />
Questa coppia di tag contrassegna l’inizio e la fine vera e propria del file<br />
….<br />
La coppia di HEAD include l’intestazione del documento,<br />
Contiene quindi i tag per la definizione del titolo della pagina:<br />
titolo pagina <br />
E delle parole chiave che descrivono sinteticamente il contenuto<br />
di una pagina Web, utili ai motori di ricerca per classificare il<br />
documento senza doverlo prelevare completamente.<br />
HTML - Introduzione<br />
….<br />
La coppia di marcatori indica che tutte le informazioni<br />
contenute tra il marcatore di apertura ed il corrispondente marcatore<br />
di chiusura fanno parte del corpo principale del documento.<br />
Gli elementi più interessanti contenuti all’interno del corpo<br />
del documento sono:<br />
Il Collegamento ipertestuale<br />
Le Immagini<br />
link a Medinfo <br />
http:// - ftp:// - mailto: - telnet://<br />
<br />
7/45
HTML - Introduzione<br />
Le tabelle<br />
Le tabelle sono uno strumento molto potente per impaginare elementi<br />
testuali/numerici, ma anche grafici.Le tabelle sono state introdotte<br />
con la seconda versione del linguaggio HTML e da allora sono state<br />
aggiunte molte caratteristiche che ne hanno potenziato ulteriormente<br />
le possibilità, soprattutto in campo grafico.<br />
<br />
<br />
Luca<br />
Rossi<br />
<br />
<br />
Marta<br />
Bianchi<br />
<br />
<br />
8/45
HTML - Introduzione<br />
Le Form<br />
Elementi che permettono agli utenti di interagire con il<br />
server che fornisce il servizio Web. La creazione di un<br />
modulo è un processo in due fasi:<br />
1- riguarda il modulo stesso,ed è un insieme di tag e di<br />
attributi contenuti entro una coppia di elementi<br />
.<br />
2- riguarda la creazione di script (o classi con linguaggi<br />
di programmazione veri e propri) che “girano”sul<br />
server (CGI,VBscript,C#…) per gestire i contenuti del<br />
modulo.<br />
9/45
HTML - Introduzione<br />
Il contenuto del tag <br />
Gli elementi da utilizzare all’interno di un modulo sono<br />
semplici. Il tag di base per la definizione di ciascun<br />
elemento è INPUT. La sintassi è:<br />
<br />
Tipo elemento definisce come appare sullo schermo il campo di<br />
input<br />
Nome campo assegna una parola chiave al campo che è<br />
utilizzato per fare riferimento al suo valore all’interno dello script.<br />
10/45
HTML - Introduzione<br />
Gli otto tipi dell’elemento input<br />
TEXT – Campo di testo di una riga<br />
PASSWORD – Campo di testo di una<br />
riga dove l’input è nascosto da asterischi.<br />
HIDDEN – Campo di testo di una riga<br />
non visualizzato ma inviato allo script.<br />
RADIO - Uno o più pulsanti di opzione<br />
raggruppati insieme<br />
CHECKBOX – Scelta Sì/No<br />
SUBMIT – Pulsante per l’invio di<br />
documenti<br />
RESET – Pulsante per ripristinare i<br />
contenuti del modulo ai valori di default<br />
IMAGE – Immagine su cui fare clic al<br />
posto del pulsante di invio.<br />
11/45
HTML in .NET<br />
Motore<br />
ASP.NET<br />
Browser del<br />
client remoto<br />
Richiesta Web<br />
Pagina di<br />
Output HTML<br />
IIS<br />
Elaborazione<br />
della pagina<br />
Pagina<br />
ASPX<br />
• I normali file HTML vengono inviati direttamente al browser<br />
• I file ASPX invece vengono prima elaborati dal servizio ASPX<br />
il quale provvederà a creare uno stream HTML con il risultato<br />
finale dell’elaborazione e IIS invierà questo file al client<br />
12/45
HTML in .NET<br />
Struttura di una pagina .ASPX<br />
Presenta una struttura molto simile a quella di una<br />
semplice pagina HTML, vengono introdotti inoltre dei<br />
particolari tag dichiarati secondo lo schema:<br />
<br />
Questi tag costituiscono la parte principale<br />
dell’interfaccia dell’applicazione ASP.NET.<br />
L’identificatore di questi elementi, chiamati Controlli,<br />
vengono programmati come un oggetto ma non<br />
corrispondono necessariamente a un unico tag nella<br />
pagina HTML finale.<br />
13/45
HTML – XML Confronto<br />
HTML è un linguaggio di contrassegno semplice progettato<br />
per documenti dalla struttura abbastanza prevedibile.<br />
Le estensioni visuali HTML consentono di emulare la<br />
struttura di un qualsiasi documento;<br />
La struttura interna del testo diviene inevitabilmente<br />
illogica, orientata esclusivamente alla presentazione.<br />
HTML non permette il riutilizzo futuro dei documenti,<br />
risulta difficile convertire i documenti in altri formati<br />
orientati alla visualizzazione o isolare gli elementi logici<br />
14/45
XML Introduzione<br />
In senso stretto XML non è un linguaggio di contrassegno , è<br />
un sistema che rende possibile la costruzione di linguaggi in<br />
grado di corrispondere a qualsiasi tipo di documento<br />
•Linguaggio markup testuale<br />
•Versione semplificata di SGML (Standard Generalized Markup<br />
Language), linguaggio usato per gestione documenti.<br />
•Standard W3C (WWW Consortium: http://www.w3.org) per<br />
rappresentazione di documenti e dati, e scambio di dati nel Web<br />
•Alcuni obbiettivi di design di XML:<br />
•direttamente utilizzabile su internet<br />
•supportare ampia gamma di applicazioni<br />
•compatibili con SGML<br />
•human-readable<br />
•facilmente processabile da programmi<br />
15/45
XML Introduzione<br />
• Linguaggio mediante cui si possono definire altri linguaggi<br />
(WSDL,SOAP,HL7…)<br />
• Estensibile<br />
permette la creazione di nuovi tag (non necessariamente legati a<br />
visualizzazione di informazioni)<br />
• Strutturato<br />
mediante tag si può rappresentare la struttura delle informazioni<br />
• Validante<br />
permette definizione di regole grammaticali per verifica di<br />
correttezza sintattica di informazioni rappresentate in XML (DTD o<br />
XMLSchema)<br />
16/45
XML - Esempio<br />
17/45
XML - Esempio<br />
La dichiarazione XML è obbligatoria e deve essere posta<br />
all’immediato inizio del documento<br />
<br />
Gli attributi sono:<br />
version: (obbligatorio) la versione di XML usata.<br />
encoding: (opzionale) nome della codifica dei caratteri<br />
usata nel documento. (default: UTF-8 o 16)<br />
standalone: (opzionale) se vale yes indica che il file non fa<br />
riferimento ad altri file esterni. (default: no)<br />
18/45
XML - Introduzione<br />
COMMENTI<br />
I commenti sono utili agli esseri umani, e vengono<br />
ignorati dai parser XML. Possono apparire ovunque<br />
tranne che all’interno degli attributi.<br />
<br />
Il commento si apre con un ,che<br />
quindi non può apparire nella stringa interna. Il contenuto<br />
non deve seguire regole, e può anche contenere caratteri<br />
riservati.<br />
19/45
XML - Introduzione<br />
Alla base della strutturazione di un documento XML ci<br />
sono gli Elementi<br />
Elemento<br />
esame<br />
Elemento<br />
indirizzo<br />
Elemento<br />
datiAnagrafici<br />
20/45
XML - Introduzione<br />
REGOLE<br />
• I nomi degli elementi sono case-sensitive.<br />
• Ogni elemento aperto deve essere chiuso entro la fine<br />
del documento.<br />
• Gli elementi possono essere nidificati, e in tal caso<br />
vanno chiusi esattamente nell’ordine inverso a quello di<br />
apertura.<br />
• Un documento XML deve avere un unico elemento<br />
radice, in cui tutti gli altri sono nidificati<br />
21/45
XML - Introduzione<br />
SINTASSI degli ELEMENTI<br />
• Il tag di apertura di un elemento deve avere la forma:<br />
<br />
•nome: nome dell’elemento<br />
•attributi: si può definire una lista di attributi opzionali<br />
• Il tag di chiusura corrispondente ha la forma:<br />
<br />
• Talvolta un elemento può essere privo di contenuto, in questo caso<br />
si può omettere il tag di chiusura scrivendo quello di apertura come<br />
segue:<br />
<br />
22/45
XML - Introduzione<br />
GERARCHIA<br />
• Gli elementi, nidificandosi, creano la struttura ad albero tipica dei<br />
documenti XML. Si definiscono quindi rapporti di parentela:<br />
Esame: nodo radice<br />
datiAnagrafici: nodo figlio di Esame<br />
indirizzo: nodo padre di via,…<br />
Cap,citta,cognome,datiAnagrafici…<br />
Sono discendenti di Esame<br />
23/45
XML - Introduzione<br />
ATTRIBUTI<br />
• Gli attributi permettono di specificare proprietà degli elementi come<br />
coppie nome-valore<br />
• Sono usati per definire proprietà che non possono o non si vogliono<br />
inserire nel contenuto dell’elemento.<br />
• Vengono specificati all’interno del tag di apertura degli elementi<br />
• A differenza di quanto succede per gli elementi, l’ordine di<br />
presentazione non è significativo<br />
24/45
XML - Introduzione<br />
VALIDAZIONE DI DOCUMENTI XML<br />
• Un documento XML è ben formato se rispetta le regole<br />
generali di sintassi viste nella parte precedente.<br />
• Un documento XML è valido se è ben formato e<br />
rispetta le regole sintattiche e semantiche contenute<br />
nel file XSD (o DTD) associato.<br />
Un documento senza XSD (o DTD) non è mai valido.<br />
25/45
XML - Introduzione<br />
Schemi XML (XSD - XML schema Definition)<br />
Gli Schemi XML sono nati con lo stesso scopo dei<br />
DTD:<br />
• Specificare la struttura dei documenti.<br />
• Modelli di contenuto, elementi radice, …<br />
• Specificare il tipo dei dati utilizzabili<br />
all’interno di elementi e attributi.<br />
26/45
XML - Introduzione<br />
Schemi XML (XSD - XML schema Definition)<br />
• Più recenti di DTD, specifica grammatica per la<br />
rappresentazione di documenti XML<br />
• Permettono la definizione della struttura<br />
suddividendoli in:<br />
- tipi semplici (predefiniti e derivati)<br />
-tipi complessi (definiti combinando tipi semplici)<br />
• Permettono di specificare elementi del documento<br />
necessari,opzionali… in un file .xsd<br />
• Supportano 44 tipi di dato<br />
27/45
XML - Introduzione<br />
Esempio di schema XML<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
XML - Introduzione<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
29/45
XML - Introduzione<br />
Nel caso in cui si decida di validare un documento XML<br />
secondo uno schema definito in un file .XSD è necessario<br />
introdurre un nuovo tag nell’intestazione del documento<br />
30/45
XML - Introduzione<br />
schema XML<br />
• Generalmente, le applicazioni che devono basarsi su<br />
documenti o dati provenienti dall’esterno “sprecano”<br />
una grossa quantità di codice per controllarne la<br />
validità.<br />
• Più complessi sono i dati, più il codice sarà laborioso da<br />
scrivere.<br />
• Se i dati sono strutturati secondo un preciso Schema<br />
XML, l’applicazione potrà avvalersi delle funzionalità di<br />
un qualsiasi validatore di schemi in commercio.<br />
31/45
XML - Introduzione<br />
Cosa forniscono gli Schemi<br />
Un modello per i dati<br />
• Descrivono cioè l’organizzazione e i tipi<br />
dell’informazione.<br />
Un contratto<br />
• Cioè un protocollo molto specifico per lo scambio di<br />
informazioni.<br />
Un insieme di Metadati<br />
• Lo schema contiene molte informazioni valide per<br />
l’interpretazione dei dati strutturati sulla sua base.<br />
32/45
XML - Introduzione<br />
Possibili impieghi di Schemi<br />
Oltre che per validare i documenti istanza, si possono<br />
immaginare molti altri impieghi per gli schemi:<br />
• Creazione automatica di interfacce per la<br />
compilazione dei documenti XML associati.<br />
• Creazione di interfacce grafiche per la<br />
rappresentazione dei dati.<br />
• Uso degli schemi per definire strutture dati e<br />
protocolli per la loro manipolazione e<br />
trasmissione.<br />
33/45
HTML-XML in .NET<br />
TCP-IP<br />
ASP.NET<br />
Applicazioni<br />
Web<br />
HTML,XHTML<br />
Browser<br />
XML<br />
ADO.NET<br />
RDBMS<br />
Web<br />
Services<br />
SOAP<br />
Browser<br />
Applicazioni<br />
Desktop<br />
Altre applicazioni<br />
o web services client<br />
34/45
XML – HL7<br />
Applicazioni XML(HL7) – Sistemi Informativi Ospedalieri<br />
Fino ad oggi la difficoltà di pervenire ad una condivisione di<br />
informazione clinica attraverso basi di dati eterogenee e’ stata<br />
grande, a causa della diversità di piattaforme software , di struttura<br />
dei database e di connessione fra i vari luoghi di deposito dei dati.<br />
L’utilizzo dello strumento Internet basato su HTML non e’ sufficiente a<br />
risolvere il problema del trasferimento di informazione clinica e della<br />
formazione e consultazione del cosiddetto Electronic Medical Record<br />
(EMR).<br />
35/45
XML – HL7<br />
Applicazioni XML(HL7) – Sistemi Informativi Ospedalieri<br />
L’adozione di XML è in grado di risolvere questo problema,<br />
pervenendo ad una standardizzazione non del formato dei dati ma<br />
del formato di scambio delle informazioni.<br />
Ogni ambiente medico può creare il proprio vocabolario attraverso<br />
uno Schema XML che specifica la struttura ed il formato di ciascun<br />
tipo di dato.<br />
Lo sforzo di standardizzazione dello scambio di documenti ha<br />
portato alla creazione di insiemi di specifiche, fino<br />
all’approvazione di HL7 (Health Level 7).<br />
36/45
Perché nasce HL7?<br />
…il primo passo per scambiare informazioni tra reparti è stato<br />
usare la comunicazione elettronica…<br />
010010010011101<br />
Sistema Informativo 1<br />
Sistema Informativo 2<br />
…ma ognuno usava un “linguaggio” elettronico diverso!<br />
37/45
HL7 nasce per standardizzare tale linguaggio!<br />
HL7<br />
Messaggio<br />
Creazione<br />
Messaggio HL7<br />
Parsing Messaggio<br />
HL7<br />
38/45
Cos’è HL7?<br />
Descrive le modalità per lo scambio in forma<br />
elettronica di dati in ambiente sanitario.<br />
Intende risolvere i problemi legati<br />
all'interoperabilità nell'ambiente clinico.<br />
HL7 Mission statement (1997):<br />
“To provide standards for the exchange, management<br />
and integration of data that supports clinical patient care and the<br />
management, delivery and evaluation of healthcare services.”<br />
39/45
Come funziona HL7?<br />
HL7 opera nella comunicazione al livello più alto del<br />
modello ISO/OSI<br />
Function<br />
7 Application<br />
6 Presentation<br />
5 Session<br />
4 Transport<br />
3 Network<br />
2 Data Link<br />
1 Physical<br />
40/45
Come funziona HL7?<br />
- Quindi la dizione “Level 7” fa riferimento proprio al<br />
livello più alto del modello OSI (Open System<br />
Interconnection)<br />
- Ciò significa che fa riferimento a regole come:<br />
- i dati scambiati<br />
- la tempistica degli scambi<br />
- la comunicazione di errori fra le applicazioni<br />
- Ciò significa che NON fa riferimento agli aspetti<br />
implementativi !<br />
41/45
I domini HL7<br />
• Un dominio è un modo per rappresentare una specifica area della sanità. Il<br />
nome del dominio deve trasmettere chiaramente alcune informazioni sia allo<br />
sviluppatore sia al lettore.<br />
Per esempio, Patient Administration e Pharmacy sono semplici concetti da cui<br />
il lettore può facilmente comprendere di cosa tratti il dominio in analisi.<br />
• Un topic è una suddivisione di dominio che permette di organizzare il<br />
dominio in modo da consentire al lettore di identificare velocemente il<br />
contesto a cui è interessato.<br />
Il lettore deve avere un’idea chiara del contenuto del documento guardando il<br />
titolo del topic e quello del dominio.<br />
Per esempio il Patient Administration (dominio) – Patient Topic (topic)<br />
consente di standardizzare tutti i dati relativi ad un paziente.<br />
Ad ogni dominio HL7 è associato un diagramma (RIM) e un file XSD (XML<br />
Schema).<br />
42/45
Patient Administration – Patient Topic<br />
43/45
Le sei classi strutturali<br />
1) 2)<br />
3) 4)<br />
5)<br />
44/45
RIFERIMENTI<br />
Specifica di XML dal W3C<br />
http://www.w3c.org/TR/XML<br />
Specifica di XML schema dal W3C<br />
http://www.w3c.org/TR/xmlschema-0<br />
http://www.w3c.org/TR/xmlschema-1<br />
Specifica di HL7<br />
http://www.hl7.org/<br />
45/45
Informatica Medica<br />
Anno Accademico 2013-2014<br />
Prof. Mauro Giacomini
Organizzazione del codice<br />
• Separazione codice-contenuto<br />
• Code-behind, dietro l’interfaccia in un qualsiasi linguaggio<br />
• Controlli Utente<br />
• Creazione di controlli specifici con relativa logica e<br />
riutilizzabili in più punti delle nostre applicazione<br />
• Creazione Componenti<br />
• Concentra la logica applicativa in elementi indipendenti<br />
dall’interfaccia utente
Separazione codice – contenuto<br />
• Codice separato dall’interfaccia HTML<br />
• Codice in qualsiasi linguaggio<br />
• Necessaria la creazione di due file, uno per l’interfaccia e<br />
uno per la logica applicativa<br />
• Nell’interfaccia necessaria la direttiva Page che specifica il<br />
nome del file di codice e la classe usata<br />
• Es<br />
Esempio_a (1)<br />
Code-behind:<br />
Imports System<br />
Imports System.Web<br />
Imports System.Data<br />
Imports System.Data.SQLClient<br />
Imports System.Web.UI.Page<br />
Public Class Dati<br />
Public Function getData () as DataSet<br />
Dim ds as DataSet<br />
Dim conn as SQLConnection<br />
Dim cmd as SQLDataAdapter<br />
Definisce una classe Dati<br />
Con una funzione<br />
pubblica getData che<br />
legge dati da un DB e li<br />
restituisce all’interfaccia<br />
con un DataSet<br />
conn = New SQLConnection (“server = MyServer;<br />
uid=sa;pwd=;database=pubs”)
Esempio_a (2)<br />
cmd = New SQLDataAdapter (“SELECT * From Authors”,<br />
conn)<br />
ds = New DataSet ()<br />
cmd.Fill (ds, “Autori”)<br />
return (ds)<br />
End Function<br />
End Class
Esempio_a (3)<br />
<br />
<br />
Sub Page_Load (scr as Object, e as EventArgs)<br />
Dim ds DataSet<br />
ds = getData()<br />
dgAutori.datasource = ds.Tables(“Autori”).DefaultView<br />
dgAutori.DataBind()<br />
End Sub<br />
<br />
Script che richiama<br />
il code-behind<br />
dell’esempio_a 1-2
Esempio_b (4)<br />
<br />
<br />
<br />
<br />
<br />
Testo HTLM di una form con un bottone il cui evento click è<br />
collegato alla procedura Scrivi dichiarata in un file code-behind
Esempio_b (5)<br />
Imports System<br />
Imports System.Web<br />
Imports System.Web.UI.WebControls<br />
Imports System.Web.UI.Page<br />
Partial Class Eventi<br />
Public lbl as Label<br />
Public txt as TextBox<br />
Code-behind con una<br />
classe Eventi che gestisce<br />
con la procedura pubblica<br />
Scrivi, l’evento di click del<br />
bottone dell’interfaccia<br />
descritta in Esempio_b (4)<br />
Public Sub Scrivi (scr as Object, e as EventArgs)<br />
End Sub<br />
End Class<br />
lbl.Text = txt.Text<br />
I controlli dell’interfaccia che devono<br />
essere modificati in questa procedura,<br />
sono dichiarati come pubblici in una parte<br />
della classe non visibile al programmatore
Esempio (6)<br />
<br />
Public btn as button<br />
Public Sub Scrivi (scr as Object, e as EventArgs)_<br />
Handles btn.Click<br />
End Sub<br />
lbl.Text = txt.Text<br />
Se si vuole un’interfaccia del tutto scollegata dal codice, si deve<br />
dichiarare il bottone nell’interfaccia senza dichiarare nell’interfaccia<br />
quale procedura gestirà il suo evento click. Il bottone viene quindi<br />
dichiarato come pubblico nel file del code-behind (parte nascosta) e la<br />
procedura deve esplicitamente di gestire (Handles) il click del bottone<br />
stesso.
Controlli utente<br />
• Parte di pagina ASP.NET importata e usata da un’altra pagina ASP.NET<br />
come se fosse con controllo server.<br />
• Fondamentali per il riutilizzo del software e per partizionare le<br />
funzionalità in un’interfaccia web<br />
• Ogni istanza di un controllo utente ha un suo proprio namespace in<br />
modo che uno stesso controllo utente può essere usato più volte, anche<br />
nella stessa pagina.<br />
• Il linguaggio di programmazione è libero ed indipendente dal<br />
linguaggio usato nell’interfaccia<br />
• I file di controlli utente contengono anche parti dell’interfaccia, sono<br />
salvati in file .ascx e possono anche avere il meccanismo del codebehind<br />
• Devono essere integrati in altre form, quindi non devono contenere<br />
, o
Esempio di Controllo Utente<br />
<br />
<br />
<br />
Esempio di Controllo Utente (2)<br />
<br />
Public Property Numero As Integer<br />
Get<br />
Return CInt (txtNum.Text)<br />
End Get<br />
Set<br />
txtNum.Text = Value.ToString()<br />
End Set<br />
End Property<br />
• Contiene una casella di testo e due controlli di validazione<br />
• Casella di testo per inserire un valore obbligatorio<br />
numerico compreso da 0 e 99<br />
• Visibili all’esterno solo gli oggetti Public (proprietà Numero<br />
che corrisponde al valore della proprietà Text della casella<br />
di testo)<br />
• Dentro alla direttiva Control possiamo inserire i comandi<br />
per gestire il code-behind<br />
•
Inserimento controllo<br />
• Un controllo utente è incluso con la direttiva<br />
<br />
• TagPrefix: definisce un namespace univoco per il<br />
controllo utente<br />
• TagName: nome del controllo<br />
• Src: file dove sta il controllo con l’eventuale percorso
Uso controllo<br />
• Per posizionare sulla pagina una o più istanze del<br />
controllo:<br />
<br />
<br />
• Per accedere alle proprietà:<br />
lblSomma.Text = (Numero1.Numero +<br />
Numero2.Numero).ToString()<br />
• Per un valore predefinito<br />
Dichiarazione componente<br />
Namespace Nome_Componente<br />
Public Class Nome_Classe<br />
…..<br />
End Class<br />
Public Class Nome_Classe_1<br />
….<br />
End Class<br />
End Namespace<br />
vbc /t:library /out:componente.dll componente.vb<br />
vbc /t:library /out:componente.dll<br />
/r:System.Data.dll componente.vb<br />
Esempio di dichiarazione di<br />
un componente<br />
Direttive per la compilazione<br />
L’assembly che si ottiene va<br />
posto nella directory reale<br />
collegata alla directory<br />
virtuale o in una directory /bin<br />
dentro di essa.
Esempio<br />
Import System.Data<br />
Import System.Data.SqlClient<br />
Namespace DatiAziendali<br />
Public Class OrdiniClienti<br />
Public Function CaricaDati (conn As SQLConnection)_<br />
as DataSet<br />
Dim daClienti as SqlDataAdapter =<br />
New SqlDataAdapter (“Select * From<br />
Clienti”, conn)<br />
Dim daOrdini as SqlDataAdapter =<br />
New SqlDataAdapter (“Select * From<br />
Ordini”, conn)<br />
Dim relClientiOrdini as DataRelation<br />
Dim ds as DataSet = New DataSet()
Esempio (2)<br />
daClienti.Fill (ds, “Clienti”)<br />
daOrdini.Fill (ds, “Ordini”)<br />
relClientiOrdini = ds.Relations.Add<br />
(“ClientiOrdini”, ds.Tables(“Clienti”).Columns(“ID”),<br />
ds.Tables(“Ordini”).Columns(“IDCliente”))<br />
return ds<br />
end Function<br />
end Class<br />
end Namespace
Uso in code-behind<br />
Import DatiAziendali<br />
Dim x as New OrdiniClienti<br />
‘Senza import<br />
Dim x as New DatiAziendali.OrdiniClienti<br />
Dim ds DataSet<br />
ds= x.CaricaDati(Conn)<br />
Uso in aspx<br />
Informatica Medica<br />
Anno Accademico 2013-2014<br />
Prof. Mauro Giacomini
Concetti di base<br />
• Tre funzioni fondamentali:<br />
• Autenticazione: riceve le credenziali, le verifica presso<br />
un’autorità, se le credenziali sono valide allora all’utente<br />
è fornita un’identità autenticata<br />
• Autorizzazione: usa l’identità trovata per capire se<br />
l’utente possa o meno accedere a una risorsa<br />
• Impersonazione: abilita l’esecuzione di un’applicazione<br />
ASP .NET nel contesto dei diritti dell’utente autorizzato
Autenticazione<br />
• Moduli con codice per la verifica delle credenziali:<br />
Authentication provider (modalità di autenticazione)<br />
• Windows authentication: delega a IIS il compito di autenticare<br />
l’utente in base alle impostazioni dell’amministrazione della rete<br />
• Passport authentication: servizio di autenticazione remota fornito<br />
da Microsoft (quello di messenger)<br />
• Forms authentication: meccanismo integrato in ASP.NET<br />
configurabile dal programmatore.<br />
• Da settare nel file web.config:<br />
<br />
<br />
• Modalità può essere: Windows, Passport, Forms,<br />
Federated, None
Windows authentication<br />
• Basata su IIS<br />
• Si applica alla risorsa da proteggere<br />
• Si setta dalla console di IIS<br />
• Tre metodi:<br />
• Basic authentication<br />
• Digest authentication<br />
• Integrated Windows authentication
Basic authentication<br />
• Metodo più diffuso in internet agli inizi del web, ora<br />
praticamente scomparso<br />
• Nome e password in chiaro dal browser WEB a IIS<br />
• Tutte le richeste che il browser farà al server<br />
conterranno anche username e password<br />
• Supportato da qualsiasi browser<br />
• Nessun problema con firewall e proxy<br />
• Assenza di crittografia della password, facile<br />
all’intrusione
NTLM<br />
• Integrated Windows authentication<br />
• Non prevede l’invio esplicito di username e password<br />
• Il client dimostra di possedere la password con lo<br />
scambio di informazioni crittografate<br />
• Scambio automatico: alla richiesta di autenticazione<br />
del server, il client risponde con le credenziali di<br />
accesso fornite da Windows quando ha avuto accesso<br />
alla macchina<br />
• Se queste non bastano allora è chiesto username,<br />
password e dominio presso cui autenticare queste<br />
informazioni<br />
• Molto protetto<br />
• Funziona solo in ambiente Windows e in rete locale
Digest authentication<br />
• Introdotto con IIS 5.0<br />
• Compromesso tra Basic Authentication e Windows<br />
Integrated Authentication<br />
• Scambio di informazioni che provano il possesso delle<br />
credenziali senza l’invio esplicito di username e password<br />
• Non interferisce con firewall e proxy server<br />
• Non tutti i browser lo supportano<br />
• La scelta del metodo di autenticazione (va fatta nella<br />
console di IIS)
Live ID authentication (1)<br />
• Servizio di autenticazione degli utenti a pagamento in<br />
esecuzione su un server dedicato gestito da Microsoft<br />
(http://dev.live.com/liveid/), con profili unici ed<br />
indipendenti dall’applicazione che li usa<br />
• Kit specifico Passport SDK<br />
• Analogo a un dominio Windows server: DB centralizzato di<br />
profili utente a cui fanno riferimento tutti i client del<br />
dominio<br />
• Il server produce un elemento di riconoscimento (Passport<br />
ticket – un cookie) che attesta l’avvenuta autenticazione<br />
• Garantisce che l’applicazione non venga in contatto con la<br />
password
Live ID authentication (2)<br />
1. Il browser richiede a un server web Passport-enabled<br />
una risorsa protetta<br />
2. La richiesta non contiene un Passport ticket valido, il<br />
browser viene reindirizzato dal Passport Manager al<br />
Passport login server (PLS) (con parametri codificati<br />
sulla richiesta originaria)<br />
3. Il browser contatta il PLS con i parametri codificati<br />
al passo precedente<br />
4. Il PLS richiede username e password, autentica<br />
l’utente e redirige il browser alla risorsa originaria<br />
fornendogli il Passport ticket<br />
5. Tutte le richieste successive avranno il Passport ticket
Forms authentication<br />
• Gestione di autenticazione da ASP.NET, meccanismo<br />
analogo a quello della Passport<br />
1. Il browser richiede una risorsa protetta da Forms authentication<br />
2. Se nella richiesta non è presente un ticket di autenticazione il server<br />
redirige il browser alla pagina di login<br />
3. L’utente immette il proprio nome e password ed iniva i dati al server<br />
4. Valutazione dei dati di convalida e se positiva è automaticamente<br />
rediretto alla richiesta originaria al browser è inviato un cookie<br />
(ticket di autenticazione) che sarà il lasciapassare per le successive<br />
richieste.
<br />
Esempio di pagina di login<br />
Metodi della classe FormsAuthentication<br />
Metodo<br />
Autenticate<br />
GetAuthCookie<br />
GetRedirectUrl<br />
RedirectFromLoginPage<br />
Descrizione<br />
date le credenziali fornite dall'utente le verifica con quelle<br />
memorizzate nel database degli utenti<br />
genera un cookie di autenticazione per un dato nome utente senza<br />
però inviarlo al browser<br />
restituisce l'URL della risorsa che ha generato la richiesta di<br />
verifica delle autorizzazioni e quindi la redirezione alla pagina di<br />
logon<br />
rimanda un utente autenticato alla risorsa originariamente richiesta<br />
SetAuthCookie<br />
SignOut<br />
genera un cookie di autenticazione per un dato nome utente<br />
inserendolo nella risposta da inviare al browser<br />
elimina il cookie di autenticazione di un utente autenticato
Esempio di procedura di convalida<br />
<br />
Sub Convalida(src As Object, e As EventArgs)<br />
If Validazione(NomeUtente.Value, Password.Value) Then<br />
FormsAuthentication.RedirectFromLoginPage<br />
(NomeUtente.Value, False)<br />
Else<br />
Messaggio.InnerText = "Utente non autorizzato!"<br />
End If<br />
End Sub<br />
<br />
La funzione booleana validazione è specifica del<br />
programma ed eventualmente accede a un DB per<br />
controllare le credenziali. Il metodo<br />
RedirectFromLoginPage vuole due parametri: il nome<br />
utente per i successivi accessi e un valore booleano<br />
sulla persistenza o meno del cookie generato
Convalida da web.config<br />
• Un metodo di convalida poco flessibile, ma molto efficiente<br />
è quello basato su una direttiva nel file web.config<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Funzione di convalida (2)<br />
• Con questo testo nel web.config la funzione di convalida<br />
usa il metodo Autenticate e diventa (nelle versioni attuali<br />
questo metodo è dichiarato obsoleto):<br />
Sub Convalida(src As Object, e As EventArgs)<br />
If FormsAuthentication.Authenticate(NomeUtente.Value,<br />
Password.Value) Then<br />
FormsAuthentication.RedirectFromLoginPage<br />
(NomeUtente.Value, False)<br />
Else<br />
Messaggio.InnerText = "Utente non autorizzato !"<br />
End If<br />
End Sub<br />
Tag credentials<br />
• Il tag ha un attributo passwordFormat che<br />
determina l’algoritmo di passaggio della password, esso può<br />
assumere i valori:<br />
• Clear: nessuna codifica<br />
• MD5: algoritmo Message Digest 5, livello di sicurezza discreto<br />
e buone prestazioni di velocità<br />
• SHAI: algoritmo omonimo con maggiore sicurezza e<br />
prestazioni inferiori in termini di velocità
Altri sistemi di autenticazione<br />
• Dall’edizione di Visual Studio 2012 si possono usare le<br />
autenticazioni di altri sistemi.<br />
• In particolare:<br />
• Facebook<br />
• Twitter<br />
• Open Oauth<br />
• Servizi di OpenId (Google)<br />
Approfondimenti in:<br />
http://blogs.msdn.com/b/webdev/archive/2012/08/15/oau<br />
th-openid-support-for-webforms-mvc-and-webpages.aspx
Gestione delle autorizzazioni<br />
• Verifica se una specifica identità ha diritto di accesso a una<br />
risorsa. Due tipi di autorizzazioni:<br />
• File authorization: attiva se si usa la modalità Windows<br />
authentication e si basa sull’uso di ACL (Access Control List)<br />
associate alle risorse (tutta a carico del sistema operativo)<br />
• URL authorization: gestisce l’autorizzazione all’accesso<br />
delleURL che puntano alle varie sezioni dell’applicazione web.
Esempio dei due metodi<br />
• Caso 1: browser trasmette richiesta di accesso a una pagina<br />
ASP.NET, il server web controlla sull’ACL di quel file per<br />
verificare se l’utente che ha effettuato la richiesta ha diritto di<br />
lettura di quel file<br />
• Caso 2: il controllo si basa sulle configurazioni<br />
dell’applicazione web, file web.config. In questo modo si<br />
possono verificare i controlli di autenticazione e<br />
autorizzazione anche se gli utenti non hanno un account sul<br />
server
Uso di URL authorization<br />
• Nel web.config:<br />
<br />
<br />
<br />
<br />
• Parametri di allow e deny<br />
• user: identificativo degli utenti<br />
• roles: ruolo o gruppo per cui si dà o nega l’autorizzazione<br />
• verbs: azioni specifiche di cui si concede o nega il diritto,<br />
possono essere: GET, HEAD, POST, DEBUG<br />
• almeno uno fra user e role è obbligatorio
Uso di URL authorization (2)<br />
• Caratteri speciali:<br />
• *: tutti gli utenti<br />
• ?: utente anonimo<br />
• la specificazione del singolo utente sovrascrive quella degli<br />
utenti generici<br />
• Con il tag location possiamo controllare l’autorizzazione per<br />
la singola pagina ASP.NET
Impersonazione<br />
• Con l’impersonazione l’applicazione ASP.NET viene<br />
eseguita con l’identità dell’utente impersonato<br />
• L’impersonazione è disabilitata per default, abilitabile nella<br />
sezione del file web.config<br />
<br />
<br />
• Con la seconda l’applicazione sarà eseguita per tutti gli<br />
utenti come se fossero Rossi.
Informatica Medica<br />
Anno Accademico 2013-2014<br />
Prof. Mauro Giacomini
Classe HttpApplication<br />
• Definisce i metodi, le proprietà e gli eventi comuni<br />
a tutte le applicazioni ASP.NET<br />
• Request: la richiesta HTTP corrente e consente<br />
l’accesso a tutti i dettagli<br />
• Response: la risposta che l’applicazione invierà al<br />
browser<br />
• Session: la sessione utente corrente<br />
• Application: l’applicazione corrente<br />
• Server: funzioni di utilità per l’elaborazione di<br />
richieste HTTP
Request<br />
• Url: indirizzo del client<br />
• UserAgent: tipo di browser<br />
• Cookies: collection dei cookies inviati dal browser (oggetti della<br />
classe HttpCookie)<br />
• Files: collection dei files inviati dal browser con una form di<br />
upload (oggetti HttpPostedFile) sono in memoria solo fino alla<br />
fine della richiesta corrente , se si vuole salvarli in modo<br />
permanente è possibile usare il loro metodo SaveAs<br />
• Form: Informazioni inviate da una form col metodo HttpPost<br />
• QueryString: Informazioni inviate da una form col metodo<br />
HttpPost con limitazioni sul numero di caratteri inviabili<br />
• ServerVariables: Insieme di variabili di ambiente del server,<br />
come ad esempio nome del webserver e indirizzo IP del client
Esempio (1)<br />
<br />
<br />
<br />
Sub RiceviFile (Source As Object, e As EventArgs)<br />
Dim NomeFile As String<br />
If Not (Request.Files.Count = 0) Then<br />
Try<br />
NomeFile = Filel.Value<br />
Request.Files("Filel").SaveAs ("c:\temp\" &<br />
NomeFile.Substring(NomeFile.LastlndexOf("\") +1))<br />
Messaggio.InnerHtml = "File " & NomeFile & " ricevuto!"<br />
Catch exc As Exception<br />
Messaggio.InnerHtml = "Errore durante il salvataggio del file<br />
" & NomeFile & ": " & exc . ToString ( )<br />
End Try<br />
End If<br />
End Sub<br />
<br />
Invio file<br />
Esempio (2)<br />
<br />
File da inviare:<br />
Response<br />
• BufferOutput: booleana se impostata a False manda<br />
l’output al client mentre si forma, il default è a True<br />
• Cookies: collection dei cookies da inviare al client<br />
• Redirect: dirotta il browser del client su un’altra pagina<br />
o su altro indirizzo Web<br />
• Write: scrive nel flusso dell’output per il client
Session<br />
• Insieme delle interazioni tra uno specifico utente e<br />
l’applicazione<br />
• Una sessione ha inizio con la prima richiesta che un<br />
utente fa di una pagina ASP.NET<br />
• Conclusione Esplicita (metodo Abandon) o implicita<br />
• Timeout tempo al quale scatta la conclusione implicita
Server<br />
• ScriptTimeout: tempo di scadenza per l’esecuzione di uno script<br />
(per evitare errori tipo loop infiniti)<br />
• Execute: esecuzione di un’altra pagina ASP.NET e alla fine il<br />
controllo ritorna alla pagina chiamante<br />
• GetLastError: restituisce l’ultimo errore runtime che si è<br />
verificato (oggetto Exception)<br />
• HtmlEncode / HtmlDecode: metodi che codificano e<br />
decodificano codice HTML<br />
• UrlEncode / UrlDecode: analogo a sopra per gli indirizzi<br />
• MapPath: restituisce il percorso fisico associato a un percorso<br />
virtuale<br />
• Transfer: termina l’esecuzione della pagina corrente e ne fa<br />
partire un’altra sul web server non sul browser del client come<br />
per Response.Redirect
Global.asax<br />
• Codici per rispondere agli eventi generati dal runtime a<br />
livello di applicazione. Risiede nella radici di<br />
un’applicazione.<br />
• Protetto: rifiuta ogni richiesta di HTTP verso di lui<br />
• Eventi di applicazione gestiti come<br />
Application_NomeEvento()<br />
• OnStrat: inizio di applicazione<br />
• OnEnd: termine<br />
• BeginRequest: inizio di richiesta<br />
• EndRequest: fine richiesta<br />
• Error: errore
Eventi di sessione<br />
• Sequenza di chiamate provenienti dallo stesso client, le<br />
informazioni sono raccolte nell’oggetto Session della classe<br />
HttpApplication<br />
• Viene generato un identificatore di sessione di 120 bit,<br />
memorizzato in SessionID dell’oggetto Session ed inviato dal<br />
client in tutte le successive interrogazioni del server<br />
• Gli eventi che si possono gestire sono: OnStart e OnEnd<br />
• Successione degli eventi:<br />
• Inizio:<br />
Altro<br />
OnStart (Application)<br />
BeginRequest<br />
BeginRequest<br />
OnStart (Session)<br />
OnStart (Session)<br />
EndRequest<br />
EndRequest
Gestione dello stato<br />
• Gestito tramite collezioni in cui inserire delle variabili e<br />
a cui assegnare valori con l’istruzione tipo:<br />
Livello (“NomeVariabile”) = Valore<br />
• Livello Applicazione<br />
• Collezione Application<br />
• Protette da variazioni non volute con Lock e Unlock (che può<br />
essere anche implicito, con richiesta soddisfatta, timeout o<br />
errore)<br />
• Livello Sessione<br />
• Collezione Session, non serve protezione di blocco<br />
• Memorizzabili automaticamente in una tabella di SQL Server<br />
• Livello Web form<br />
• Collezione ViewState
Oggetti statici<br />
• Le variabili di applicazione e di sessione possono memorizzare<br />
qualsiasi tipo, anche un oggetto, quindi possono essere utilizzati<br />
in ogni altro punto del programma<br />
• Possiamo anche creare degli oggetti nel file Global.asax<br />
• Sintassi:<br />
<br />
• Ident = nome assegnato all’oggetto<br />
• Livello = Application o Session<br />
• Class o Classid o Progid indicano la classe a partire dalla quale<br />
creare l’oggetto: Class da un namespace di .NET, Classid o<br />
Progid per una classe COM
Web.config<br />
• Informazioni di configurazione, memorizzate in file<br />
formato XML presenti in più cartelle. Sono applicate in<br />
modo gerarchico, si ereditano quelle superiori e quelle<br />
inferiori si sovrappongono a quelle superiori.<br />
• : globali per l’applicazione<br />
• : supporto di autenticazione<br />
• : supporto di autorizzazione<br />
• : definizione di impostazione per<br />
browser<br />
• : impostazioni di compilazione<br />
• : messaggi di errore personalizzati<br />
• : codifica caratteri nazionali
Web.config<br />
• : specifici moduli di gestione delle pagine<br />
• : gestione dei moduli dell’applicazione<br />
• : configura il runtime di .NET<br />
• : controlla l’account da associare all’applicazione<br />
• : imposta chiavi per trasmissione dati criptati<br />
• : impostazioni per le pagine<br />
• : modello di esecuzione dei processi in IIS<br />
• : politiche di sicurezza in apposti file<br />
• : impostazioni per le sessioni utente<br />
• : servizio di tracing<br />
• : imposta il livello di sicurezza per una applicazione<br />
• : impostazioni per i servizi Web
Accesso ai parametri di configurazione<br />
• Gestiti autonomamente dal runtime<br />
• Possiamo definire parametri specifici per l’applicazione<br />
con il tag <br />
• Questi parametri saranno accessibili con la collection<br />
ConfigurationSettings.AppSettings<br />
• Possiamo limitare l’applicazione delle impostazione di<br />
configurazione con il tag e specificare il<br />
percorso della singola risorsa interessata, va al secondo<br />
livello subito dopo e dentro deve<br />
essere specificato il namespace.
Applicazioni multithreading<br />
• In applicazioni multiutente è indispensabile poter<br />
eseguire dei "blocchi" delle risorse in modo che<br />
l'accesso simultaneo da parte di più utenti non<br />
corrompa o modifichi il contenuto dello stesso.<br />
• La natura asincrona dei thread implica la necessità di<br />
coordinare l'accesso alle risorse. In caso contrario, due o<br />
più thread potrebbero accedere contemporaneamente<br />
alla stessa risorsa, senza che l'uno rilevi le azioni<br />
dell'altro. Il risultato è un danneggiamento<br />
imprevedibile dei dati.
Uso del semaforo<br />
• Le istruzioni lock (C#) e SyncLock (Visual Basic)<br />
consentono di assicurarsi che un blocco di codice<br />
venga eseguito fino al completamento senza subire<br />
interruzioni da altri thread. Questo risultato si ottiene<br />
specificando un blocco a esclusione reciproca per un<br />
determinato oggetto per la durata del blocco di codice.<br />
• A un'istruzione lock o SyncLock viene assegnato un<br />
oggetto come argomento, seguito da un blocco di<br />
codice che dovrà essere eseguito solo da un thread alla<br />
volta.
Esempi di codice<br />
VB C#<br />
Public Sub Processo()<br />
Dim lockThis As New Object<br />
SyncLock lockThis<br />
' Creazione connessione,<br />
accesso alle risorse, chiusura<br />
e annullamento connessione.<br />
public void Processo()<br />
{<br />
private System.Object lockThis = new<br />
System.Object();<br />
lock (lockThis)<br />
{<br />
// Creazione connessione,<br />
accesso alle risorse, chiusura<br />
e annullamento connessione.<br />
End Sub<br />
End SyncLock<br />
}<br />
}
Gestione della connessione<br />
• La connessione deve esistere solo all’interno del blocco<br />
lock, occorre quindi crearla dopo l’inizio del blocco e<br />
distruggerla prima della chiusura di SyncLock.<br />
• In VB<br />
conn_str = Nothing<br />
• In C#<br />
conn_str = null;
Informatica Medica<br />
Anno Accademico 2013-2014<br />
Prof. Mauro Giacomini
Tracing<br />
• L’abilitazione di questa funzione consente di<br />
visualizzare al fondo di una pagina .aspx informazioni<br />
sulle seguenti categorie:<br />
• Request Details: HTTP, ora, tipo, Id di sessione<br />
• Trace Information: generate da istruzioni personalizzate<br />
• Control Tree: sui controlli presenti nella pagina<br />
• Cookies Collection: cookies inviati nella richiesta HTTP<br />
• Header Collection: elenco degli header HTTP<br />
• Form Collection: elenco dei valori inviati con la form<br />
• Server Variables: variabili di ambiente del server<br />
• Visualizzabili in una pagina .aspx o salvabili in un file<br />
.log
Tracing a livello di pagina<br />
• Abilitazione a livello di pagina:<br />
<br />
• Valori del TraceMode<br />
SortByTime<br />
SortByCategory<br />
• Oggetto Trace, dove si possono fornire informazioni<br />
personalizzate nella sezione Trace Information, con i metodi<br />
Trace.Write e Trace.Warn (testo in rosso). Due parametri: la<br />
categoria e il messaggio vero e proprio.
Tracing a livello di applicazione<br />
• Abilitazione per tutte le pagine (a meno che non sia<br />
esplicitamente disabilitato). Nel web.config:<br />
<br />
• Altri attributi:<br />
• pageOutput: booleano<br />
• requestLimit: numero di richieste monitorate (def. 10)<br />
• Istruzioni di codice possono essere presenti nel codice<br />
definitivo, se non è abilitato il tracing non hanno alcun<br />
effetto
• Importare System.Web<br />
Tracing dei componenti<br />
• Istruzione: HttpContext.Current.Trace.IsEnabled = True<br />
• Simile istruzione per il write: HttpContext.Current.Trace.Write<br />
(“Componente”, “Riga di tracing di Esempio”)<br />
• Accorgimenti:<br />
• Se in un componente è stato abilitato il tracing, tutte le pagine<br />
che accedono ad esso avranno il tracing abilitato<br />
• Se si abilita il tracing in un qualsiasi metodo della classe<br />
diverso dal costruttore, solo le pagine che usano quel metodo<br />
saranno abilitate per il tracing<br />
• Se nel costruttore di una classe del componente si disabilita il<br />
tracing, allora tutte le pagine che avranno accesso al<br />
componente avranno il tracing disabilitato<br />
• Se non si menziona il tracing nel componente, ma è chiamato<br />
da una pagina col tracing abilitato, allora lo avrà anche lui
Oggetto Exception<br />
• Due classi:<br />
• System.SystemException (propri del sistema)<br />
• System.ApplicationException (dell’applicazione)<br />
• Proprietà: tutte di sola lettura (tranne Source ed<br />
Helplink)<br />
• Message: testo della descrizione dell’errore<br />
• TargetSize: nome e firma della procedura nella quale è stata<br />
sollevata l’eccezione<br />
• StackTrace: stringa che descrive il percorso nello stack a<br />
partire dalla posizione in cui si è verificata l’eccezione<br />
• Source: imposta o restituisce il nome del componente nel<br />
quale è stata sollevata un’eccezione.<br />
• Helplink: link alla risorsa di aiuto per quel particolare punto.
Try …Catch<br />
• Try deve precedere parti in cui può essere sollevata<br />
un’eccezione<br />
• Catch: filtro delle eccezioni, dove si esaminano le<br />
proprietà dell’oggetto eccezione e si decide in<br />
conseguenza<br />
• Catch: può essere ripetuta ed affiancata a diversi<br />
tipi di eccezione che vengono verificati in ordine di<br />
apparizione<br />
• Catch ex as Exception: clausola finale di tutte le<br />
catene di Catch
When … Finally … End Try<br />
• When: Espressione aggiuntiva di Catch che consente<br />
di specificare una ulteriore condizione che deve avere<br />
valore a true se si vuole che il blocco di codice della<br />
Catch venga eseguito<br />
• Il codice fra Finally e End Try viene eseguito sempre<br />
indipendentemente dal fatto che nella try si sia<br />
verificato un’eccezione o meno.
Uso del Debugger<br />
• Debugging possibile perché è linguaggio compilato, con<br />
informazioni aggiuntive in file .pdb<br />
• Nella web.config:<br />
<br />
• Togliere questa direttiva dalla versione di distribuzione<br />
• Per lanciare il debug chiamare la pagina che si vuole con<br />
il browser, generando quindi il processo<br />
(aspnet_wp.exe), dopo ciò chiamare il processo di debug<br />
con DbgCLR.exe dentro cui devo andare esplicitamente<br />
ad aprire la pagina che vogliamo debuggare con la voce<br />
Debug Process del menu Tool . Segue un ambiente di<br />
Debug usuale.
Gestione degli errori a runtime (1)<br />
• Quattro categorie di errori<br />
• di configurazione, nella sintassi o struttura di qualche file<br />
web.config della gerarchia dell’applicazione<br />
• di sintassi, pagine di descrizione degli oggetti (.aspx)<br />
• di compilazione, nelle pagine di codice (.vb)<br />
• di runtime, durante l’esecuzione<br />
• Errori nelle prime tre categorie devono essere rimossi<br />
• Cause degli errori runtime: mancanza di una risorsa,<br />
problemi di connessione, errata indicazione del nome di<br />
un campo, divisione per zero, overflow<br />
• Di solito è visualizzato lo stack delle procedure
Gestione degli errori a runtime (2)<br />
• I dettagli dell’errore possono essere visualizzati sul browser<br />
locale del server o su quello del client o su entrambi, il default<br />
è la prima condizione.<br />
• E’ possibile specificare una pagina d’errore personalizzata a<br />
cui reindirizzare i client in caso di errore, mettendo nel<br />
web.config la sezione seguente<br />
<br />
• Possibili valori di mode: Off, On, RemoteOnly<br />
• Il percorso di dove si è verificato l’errore è recuperabile<br />
come argomento di una query string
Esempio (1)<br />
<br />
<br />
Pagina di gestione degli errori <br />
<br />
<br />
Gestione errori <br />
Si è verificato un errore sulla pagina<br />
<br />
<br />
Esempio (2)<br />
Nella sezione customError del file web.config posso indicare<br />
diverse destinazioni in dipendenza del tipo di errore<br />
<br />
<br />
<br />
<br />
<br />
A livello di pagina, si può indicare una sola pagina per tutti gli<br />
errori<br />
Esempio (3)<br />
Gestisco anche tutti gli errori con l’evento Error<br />
Sub Page_Error (src as Object, e as EventArgs)<br />
Dim message as String<br />
message=“Si è verificato l’errore ” &<br />
Server.GetLastError().ToString()<br />
message= message & “nella pagina ” &<br />
Request.Url.ToString()<br />
Response.Write (message)<br />
End Sub
Altre azioni legate agli errori<br />
• Invio di una email all’amministratore del sistema con il<br />
name space System.Net.Mail e con l’oggetto<br />
MailMessage per la creazione del messaggio e l’oggetto<br />
SmtpMail per l’invio (ma sul server deve essere attivo<br />
un servizio di SMTP)<br />
• Per gestire l’errore da codice devo gestire l’evento Error<br />
dell’oggetto Application del file Global.asax
Uso delle informazioni del file log<br />
• Importare il name space System.Diagnostics<br />
• Questo consente l’accesso all’oggetto EventLog<br />
• Questo oggetto prevede metodi per l’individuazione o<br />
la creazione di file di log e l’inserimento di<br />
informazioni
La gestione della cache<br />
• Caching: capacità di memorizzare le informazioni richieste<br />
in modo da non doverle ricreare nelle successive richieste.<br />
• Usata a livello di: browser, proxy server, web server<br />
• ASP.NET<br />
• fornisce il supporto alla gestione personalizzata della cache<br />
• consente di decidere quali parti dell’applicazione<br />
memorizzare in cache sulla base dell’applicazione stessa
Tipi di caching<br />
• Output caching<br />
• Memorizzazione dell’output generato dall’esecuzione del<br />
codice contenuto in un pagina<br />
• Utile quando l’intero contenuto di una pagina può essere<br />
riutilizzato<br />
• Data caching<br />
• Memorizzazione degli oggetti e della loro condivisione tra le<br />
diverse richieste che giungono all’applicazione<br />
• Sono definibili anche la durata della permanenza in cache o<br />
la modalità di distribuzione delle informazioni<br />
memorizzate
Output caching<br />
• Abilitare l’output caching: con direttiva all’inizio della<br />
pagina stessa<br />
<br />
• Duration: tempo di permanenza in secondi<br />
• VarByParam: con none si dice che il contenuto non<br />
varia in presenza di parametri specificati tramite GET<br />
• Location può assumere:<br />
• Any: memorizzata a tutti i livelli<br />
• Client: memorizzata solo sul browser<br />
• Downstream: memorizzata sul proxy server<br />
• Server: memorizzata solo sul server<br />
• None: disabilita la cache
Parametri per il caching<br />
• VarByParam: consente di memorizzare diverse copie<br />
dell’output di una pagina in base al valore dei parametri<br />
GET inviati dal browser<br />
• VarByHeader: consente la memorizzazione diversificata in<br />
base al valore dell’header HTTP della richiesta<br />
• VarByCustom: consente la memorizzazione nella cache in<br />
base al tipo di browser o ad altri parametri personalizzabili<br />
Data Caching<br />
• ASP.NET espone un oggetto denominato Cache che<br />
consente la memorizzazione e il recupero di informazioni<br />
al suo interno<br />
• Ogni applicazione ha un suo oggetto Cache privato, la cui<br />
durata coincide con la vita dell’applicazione stessa<br />
• Memorizzazione:<br />
Cache(“chiave”) = valore<br />
• Recupero:<br />
Valore = Cache(“chiave”)
Corso di<br />
<strong>INFORMATICA</strong> <strong>MEDICA</strong><br />
CL3 – Ingegneria Biomedica<br />
Informatica Medica 2013/2014 1
Sommario<br />
• Telemedicina:<br />
Sistemi informativi<br />
Reti, TCP/IP e Internet<br />
Telemedicina e principali applicazioni (teleradiologia,<br />
telecardiologia, assistenza domiciliare, esempi)<br />
Informatica Medica 2013/2014 2
Sistemi informativi<br />
Insieme ordinato delle risorse (umane e<br />
strumentali) e delle procedure<br />
organizzative preposte alla<br />
raccolta, archiviazione, elaborazione e<br />
scambio di dati<br />
con lo scopo di<br />
produrre e distribuire informazioni<br />
alle persone che ne hanno bisogno nel<br />
momento e nel luogo adatti.<br />
Informatica Medica 2013/2014 3
Esempio di sistema informativo<br />
CRUSCOTTO E<br />
ALLARMI<br />
VALUTAZIONE<br />
EPIDEMIOLOGICA<br />
WHAT IF<br />
Office Automation, Network Operating System<br />
and Telecommunications<br />
Sistema Informativo di supporto<br />
per Controllo e Decisione (DSS)<br />
Sottosistema del Prodotto<br />
(Datawerehouse)<br />
Omogeneizzazione delle<br />
informazioni<br />
Sistemi Infromativi di Contesto<br />
Regione, Ministero, Comuni, ...<br />
Sistemi Informativi Gestionali<br />
Informatica Medica 2013/2014 4
Diario Clinico<br />
Servizi specialistici<br />
Referti specialistici e<br />
Diagnostica<br />
in rete<br />
Medici di altri reparti<br />
Dati di cartella clinica<br />
PC del reparto<br />
Informatica Medica 2013/2014 5
Procedure integrate nel<br />
Sistema Informativo di reparto<br />
Servizi<br />
Amministrativi<br />
Approvvigionamenti<br />
Sistema<br />
Informativo<br />
di Reparto<br />
DAY<br />
HOSPITAL<br />
Servizi<br />
Alberghieri<br />
Cartella clinica ed<br />
Infermieristica<br />
Gestione<br />
Follow-up<br />
Informatica Medica 2013/2014 6
Modalità di accesso alle<br />
prestazioni ambulatoriali<br />
MEDICO DI BASE<br />
FARMACIA<br />
ABITAZIONE<br />
CUP<br />
STRUTTURE DI DEGENZA<br />
Informatica Medica 2013/2014 7
Medico & Manager<br />
Ospedale<br />
Decisioni<br />
INTEGRAZIONE<br />
Ambulatori<br />
Controllo<br />
Medicina generale e territoriale<br />
Gestione<br />
Area clinico sanitaria<br />
Area amministrativa e<br />
controllo di gestione<br />
Informatica Medica 2013/2014 8
Standards<br />
Sistema Informativo<br />
Ospedaliero (SIO)<br />
Cartella Clinica<br />
Ospedaliera (EPR)<br />
Cardiologia<br />
Reparti di Degenza<br />
HL7<br />
Radiologia<br />
Farmacia<br />
UTIC<br />
DICOM<br />
Laboratorio<br />
Analisi<br />
Oncologia<br />
Chirurgia<br />
Informatica Medica 2013/2014 9
Telemedicina: obiettivi<br />
· La complessità degli sviluppi gestionali legati all'assistenza clinica e<br />
sanitaria che richiedono consulti esterni e rapide comunicazioni per<br />
assumere decisioni (nel Primo e Pronto soccorso, nello scambio urgente<br />
di informazioni tra strutture, nella reperibilità dei posti letto, etc.);<br />
· L'isolamento di cittadini, residenti in aree remote o isolate, oppure urbane<br />
- in particolar modo nelle grandi aree metropolitane<br />
- per i quali si pongono specifiche e particolari esigenze (anziani soli,<br />
disabili, pazienti affetti da patologie croniche, pazienti in dimissione<br />
protetta ospedaliera, persone in genere che non sono in grado di<br />
ricevere un'adeguata assistenza medica in loco);<br />
· I servizi di formazione ed educazione per l'aggiornamento dei medici, degli<br />
operatori socio-sanitari e delle associazioni di volontariato<br />
(Teledidattica);<br />
· La necessità per i disabili di poter accedere ai servizi di telecomunicazioni,<br />
attraverso soluzioni che consentano il superamento delle "barriere<br />
tecnologiche".<br />
Informatica Medica 2013/2014 10
Telemedicina: risultati<br />
· La diffusione dell'assistenza socio-sanitaria<br />
domiciliare;<br />
· L'esecuzione e la relativa trasmissione di esami<br />
diagnostici a distanza;<br />
· La consultazione a distanza tra specialisti;<br />
· La diffusione capillare dell'assistenza specialistica;<br />
· L'evoluzione del rapporto tra il personale afferente la<br />
sfera socio-sanitaria (medico specialista, medico di<br />
base, farmacista, infermiere, assistente sociale,<br />
operatori del volontariato in genere, etc.).<br />
Informatica Medica 2013/2014 11
The Hospital Information Service<br />
(HIS)<br />
PC<br />
MAC<br />
ADMINISTR.<br />
SERVER<br />
CLINICAL<br />
SERVER<br />
UNIX WS<br />
LOCAL<br />
AREA<br />
NETWORK<br />
BIO<strong>MEDICA</strong>L<br />
INSTRUMENTATION<br />
BIOIMAGING<br />
MODALITY<br />
Informatica Medica 2013/2014 12
Condivisione strumentazioni<br />
Si studiano reti locali: ad esempio un particolare reparto ha<br />
una macchina utilizzata da più reparti<br />
Es: TAC(radiologia) puo’ essere utilizzata da chirurgia,<br />
ortopedia, etc… (livelli clinici)<br />
Risulta che:<br />
La distribuzione immediata con servizi centralizzati rende<br />
disponibili i dati subito<br />
Informatica Medica 2013/2014 13
Necessità di una rete<br />
1. Accesso all’informazione<br />
2. Condivisione di risorse<br />
3. Affidabilità<br />
4. Comunicazione<br />
5. Condivisione di compiti<br />
Informatica Medica 2013/2014 14
Modello client-server<br />
Nodi Client che fanno richiesta al server<br />
Nodi Server che forniscono servizi ai client<br />
Informatica Medica 2013/2014 15
Modello client-server<br />
Un sistema client server funziona tramite sequenze<br />
di richieste di domande e risposte<br />
Informatica Medica 2013/2014 16
Modello peer to peer<br />
In un modello peer to peer non ci sono client<br />
e server predefiniti (es. Emule)<br />
Informatica Medica 2013/2014 17
Classificazione<br />
• Local Area Network (LAN)<br />
Intranet<br />
• Metropolitan Area Network (MAN)<br />
• Wide Area Network (WAN)<br />
• Internet<br />
Informatica Medica 2013/2014 18
LAN e INTRANET<br />
Informatica Medica 2013/2014 19
Reti LAN<br />
• Which is a series of nodes connected to work and communicate<br />
together within a limited geographical area. There are a number of<br />
topologies that are common to LAN; they are Star, Bus and Ring<br />
topologies.<br />
When we talk of topologies, we are talking of the manner in<br />
which network devices are organized.<br />
Informatica Medica 2013/2014 20
(1) Star<br />
This is a form of LAN architecture is which nodes on a<br />
network are connected to a common central hub or switch,<br />
and this is done by the use of dedicated links.<br />
Informatica Medica 2013/2014 21
(2) Ring<br />
This topology is a simple design and consists of a single<br />
cable that forms the main data path in the shape of a ring.<br />
Each device is connected to a closed loop of cable. Signals<br />
travel in one direction from one node to all other nodes<br />
around the loop.<br />
Informatica Medica 2013/2014 22
(3) Bus<br />
In the bus topology the server is at one end, and the client<br />
PCs (devices) are connected at different points or positions<br />
along the network. All signals pass through each of the<br />
devices. Each device has a unique identity and can<br />
recognize those signals intended for it. It is easy and<br />
simple to design and implement.<br />
Informatica Medica 2013/2014 23
Reti Metropolitane (MAN)<br />
• Sono grandi LAN, di simile tecnologia<br />
• Non sono molto diffuse<br />
• Normalmente gestite da provider pubblici<br />
• Uno o due cavi (no switching)<br />
Informatica Medica 2013/2014 24
Reti WAN<br />
• Interconnettono LAN/MAN<br />
• Si basano su una sotto-rete con routers<br />
Hosts e switching computers-routers<br />
• Broadcast (LAN/MAN), punto- punto wan<br />
• Commutazione di pacchetto<br />
Informatica Medica 2013/2014 25
Reti WAN<br />
Sequenza di pacchetti tra il nodo mittente (sending host)<br />
E il nodo destinatario (receiving host)<br />
Informatica Medica 2013/2014 26
INTERNET<br />
• Internet: connessione di reti (WAN, MAN,<br />
LAN)<br />
• Estensione su tutto il globo terrestre<br />
• Rete per tutti i tipi di utente e per un grande<br />
numero di applicazioni<br />
(Il WEB è solo un’applicazione di Internet)<br />
Informatica Medica 2013/2014 27
Protocolli di rete<br />
• Per ridurre la complessità e per ragioni di<br />
modularità le reti sono organizzate come una<br />
serie di strati o livelli ognuno costruito sul<br />
livello inferiore.<br />
• Le convenzioni e le regole usate nelle<br />
comunicazioni di uno stesso livello tra due<br />
macchine sono dette protocollo.<br />
• Un protocollo è un accordo tra più elementi<br />
che devono stabilire una conversazione.<br />
Informatica Medica 2013/2014 28
Protocolli di rete<br />
• Logicamente il livello di una macchina comunica<br />
con il livello n di un’altra macchina.<br />
• In pratica, nessun dato viene trasferito direttamente<br />
dal livello n di una macchina al livello n di un’altra<br />
macchina.<br />
• I dati passano da un livello a quello sottostante fino<br />
al livello fisico che trasmette i dati sulla rete fino alla<br />
macchina ricevente.<br />
• Tra due livelli esiste una interfaccia.<br />
Informatica Medica 2013/2014 29
Modello a strati (1)<br />
• Il modello a strati è una rappresentazione dei sistemi di<br />
rete che permette concettualmente di separare le diverse<br />
funzionalità in strati di protocolli<br />
• L'idea della stratificazione è fondamentale per disegnare<br />
l'architettura software strutturata in livelli, ognuno dei<br />
quali, tratta una parte specifica dei problemi di<br />
trasmissione<br />
• Il concetto di stratificazione poggia su il principio che lo<br />
strato ennesimo alla stazione destinazione deve ricevere<br />
un pacchetto identico a quello che è uscito dal medesimo<br />
livello alla stazione sorgente.<br />
Informatica Medica 2013/2014 30
Modello a strati (2)<br />
• Ogni livello, comunica con un livello di pari "altezza"<br />
nell'architettura tramite il protocollo associato.<br />
• Ogni livello comunica attraverso una connessione<br />
logica.<br />
• Se necessario il pacchetto può attraversare altre<br />
macchine intermedie (router) prima di giungere a<br />
destinazione, ma in queste penetra solo i due strati<br />
più bassi dell'interfaccia di rete e del datagramma<br />
base IP.<br />
Informatica Medica 2013/2014 31
Modello a strati(3)<br />
• I due principali esempi di modelli stratificati sono<br />
rappresentati dal Open System Interconnection<br />
(OSI) dell'ISO e dal TCP/IP (Transmission Control<br />
Protocol/nternet Protocol).<br />
• TCP/IP è organizzato concettualmente in quattro<br />
livelli più un quinto costituito dal supporto fisico<br />
vero e proprio.<br />
• Lo schema OSI è invece organizzato in sette livelli,<br />
questo schema è descritto più avanti<br />
Informatica Medica 2013/2014 32
Modello TCP/IP (1)<br />
• Application Layer:si occupa di definire gli standard dei protocolli di<br />
comunicazione delle applicazioni (programmi). Come si evince dal nome,<br />
questo livello è gestito dal programma che ha necessità di trasmettere<br />
dati.<br />
• Tranport Layer: riceve i dati dal livello sopra e si occupa di gestire il<br />
flusso di dati tra due apparati ovvero permette la comunicazione tra un<br />
livello applicativo ed un altro; una comunicazione di questo tipo è spesso<br />
detta "end-to-end".<br />
• Internet Layer (IP): riceve i dati dal livello Transport e si occupa del<br />
“viaggio” dei pacchetti sulla rete ovvero il routing (instradamento)<br />
dei pacchetti attraverso i router (dispositivo chiamato instradatore). Il<br />
protocollo utilizzato per svolgere tale compito è Internet Protocol (IP)<br />
motivo per cui il livello è detto appunto IP. A questo livello vengono<br />
creati i datagrammi (pacchetti) di base della rete.<br />
Informatica Medica 2013/2014 33
Modello TCP/IP (2)<br />
• Network Interface Layer: riceve i dati dal livello sopra e si occupa<br />
della comunicazione tra le schede di rete. E’ costituito da una interfaccia<br />
di rete che accetta il datagramma IP e lo trasmette, previo incapsularlo<br />
in appositi frame (questo è il nome che assumono i dati quando<br />
transitano per questo livello), sull'hardware di rete (il cavo).<br />
Informatica Medica 2013/2014 34
Comunicazione tra due host<br />
Informatica Medica 2013/2014 35
Modello ISO/OSI<br />
E’ costituito da 7 livelli:<br />
• Application<br />
• Presentation<br />
• Session<br />
• Transport<br />
• Network<br />
• Data link<br />
• Physical<br />
Informatica Medica 2013/2014 36
Livelli ISO/OSI (1)<br />
• Application layer: fornisce un insieme di protocolli che operano a<br />
stretto contatto con le applicazioni utilizzate direttamente dall'utente<br />
finale.<br />
• Presentation Layer: agisce da traduttore per i servizi dello strato<br />
applicativo trasformando i dati forniti dalle applicazioni in un formato<br />
standardizzato<br />
• Session layer: ha il compito di stabilire e mantenere la comunicazione<br />
tra due computer. Instaura, mantiene ed abbatte connessioni (sessioni)<br />
tra applicazioni cooperanti e si occupa anche della sincronia di<br />
invio/ricezione messaggi<br />
• Transport layer: fornisce un alto livello di controllo sullo spostamento<br />
delle informazioni tra i sistemi terminali di una sessione di<br />
comunicazione. Permette un trasferimento di dati trasparente e<br />
affidabile.<br />
Informatica Medica 2013/2014 37
Livelli ISO/OSI (2)<br />
• Network layer: si occupa di smistare pacchetti su collegamenti multipli.<br />
Rende i livelli superiori indipendenti dai meccanismi e dalle tecnologie di<br />
trasmissione usate per la connessione. Si occupa di stabilire, mantenere<br />
e terminare una connessione, garantendo il corretto e ottimale<br />
funzionamento della sottorete di comunicazione<br />
• Data link layer: definisce le regole per inviare e ricevere informazioni<br />
tra due sistemi in comunicazione.<br />
• Physical layer: comprende tutte le funzioni (procedure meccaniche ed<br />
elettroniche) che permettono una connessione a livello fisico.<br />
Informatica Medica 2013/2014 38
Protocollo Ethernet<br />
• Opera in basso a due strati del modello OSI: il livello di Data Link e il livello Fisico<br />
• E’ stato sviluppato sul concetto di condivisione: tutte le macchine di una rete<br />
locale condividono la stessa connessione, lo stesso cavo, e l'hardware che<br />
implementa il protocollo ethernet è costruito in modo da filtrare e ignorare tutto il<br />
traffico che non appartiene alla LAN.<br />
• Utilizza un algoritmo di accesso multiplo alla rete detto CSMA/CD e ciò permette<br />
all'Ethernet, in certe condizioni, di avere un'efficienza di trasmissione del 100%.<br />
In CSMA / Collision Detection (CSMA / CD), il dispositivo controlla i media per<br />
la presenza di un segnale dati. Se un segnale dati è assente, il che indica che i mezzi<br />
di informazione è libera, il dispositivo trasmette i dati. Se i segnali sono poi rilevato<br />
che la mostra è stata un altro dispositivo che trasmette al tempo stesso, tutti i<br />
dispositivi e interrompere l'invio di riprovare più tardi.<br />
Informatica Medica 2013/2014 39
Protocollo TCP-IP<br />
• Regola l’instradamento dei pacchetti che contengono i dati<br />
lungo tutta la rete: permette che le informazioni partano da<br />
un mittente e giungano al destinatario.<br />
• I dati vengono suddivisi in gruppi elementari chiamati<br />
pacchetti che viaggiano autonomamente nella rete.<br />
• TCP e l'IP sono due tipi di “protocolli internet'‘.<br />
• TCP (Transport Control Protocol) assicura che tutti i<br />
pacchetti inviati a un computer remoto siano realmente<br />
arrivati a destinazione.<br />
• IP (Internet Protocol) detta le regole base per organizzare i<br />
pacchetti di dati che viaggiano in una rete.<br />
• Il TCP lavora al di sopra di IP.<br />
Informatica Medica 2013/2014 40
Protocollo TCP-IP<br />
Per TCP/IP non si intende solo il protocollo di<br />
trasmissione TCP ed il protocollo di rete IP, ma<br />
una famiglia di protocolli comprendente anche<br />
l'UDP, l'ARP, il RARP ed altri, da cui però sono<br />
escluse le applicazioni quali la posta elettronica (Email)<br />
, il trasferimento di file (FTP) e l'emulazione<br />
di terminale remota (TELNET).<br />
Il TCP/IP, al contrario di molti standards diventati in<br />
seguito protocolli, è nato prima come protocollo e<br />
successivamente è stato affinato per farlo<br />
diventare uno standard.<br />
Informatica Medica 2013/2014 41
Protocollo IP<br />
Internet Protocol (IP) è un protocollo di<br />
instradamento connection-less<br />
• Funzioni:<br />
– instradamento dei messaggi basato su<br />
indirizzi unici a 32 bit (IP address)<br />
– frammentazione e riassemblaggio<br />
– rilevazione (senza correzione, con notifica)<br />
degli errori<br />
Informatica Medica 2013/2014 42
Indirizzi IP<br />
• Un indirizzo IP identifica univocamente un Host sulla rete<br />
• Gli indirizzi sono organizzati in classi di differente cardinalità,<br />
per sopperire ad esigenze di differenti organizzazioni<br />
• Gli indirizzi hanno una semplice gerarchia<br />
– Rete<br />
– Host nell’ambito della rete<br />
• Un indirizzo IP è una stringa di 32 bit, spesso presentata nella<br />
“dot notation”, come sequenza di 4 byte<br />
Informatica Medica 2013/2014 43
Indirizzi IP<br />
•Classe A: usata per reti con più di 2 alla 16 hosts (655536),distinguibili dai tre<br />
bit di ordine più alto<br />
•Classe B: usata per reti con un numero di hosts compreso tra 2 alla 8 (256) e<br />
2 alle 16 (65536) hosts, dedica 14 bits per la netid e 16 per la hostid<br />
•Classe C: usata per reti con meno di 2 alla 8 (256) hosts, dedica 21 bits per<br />
la netid e 8 per la hostid<br />
•Classe D: è usata per la particolare distribuzione di dati, detta multiscaling<br />
•Classe E: è destinata ad usi futuri<br />
Informatica Medica 2013/2014 44
Indirizzi IP<br />
ES: IP 44.134.60.2<br />
44. la rete assegnata ai radio amatori<br />
134. designa la rete italiana<br />
60. designa la rete a cui appartiene la Lombardia<br />
2 designa il computer connesso al ricetrasmettitore radio di uno<br />
specifico radiamatore<br />
Informatica Medica 2013/2014 45
Hostname e domain-name<br />
• E’ possibile assegnare un nome più intuitivo al PC (hostname)<br />
e mappare HOSTNAME e indirizzo IP. Es. ntbio<br />
• Un dominio e' un gruppo di macchine che sono “logicamente''<br />
connesse tra loro. Il nome del dominio e' come l'indirizzo IP:<br />
dei punti separano parti del nome e ciascuna parte<br />
rappresenta un diverso livello della gerarchia del dominio.<br />
Un dominio è “unige.it‘:<br />
• it è il dominio di primo livello<br />
• Unige è il dominio di secondo livello contenente tutti i<br />
computer dell’università di Genova.<br />
Quando combini un HOSTNAME con un DOMAIN NAME ottieni<br />
qualcosa simile a “ntbio.unige.it'‘. Se il computer ha più di un<br />
utente, possiamo aggiungere il nome dell'utente all'inizio<br />
dell'indirizzo separandolo con il carattere “@''.<br />
Informatica Medica 2013/2014 46
Telemedicina<br />
This is…<br />
…CARE<br />
Informatica Medica 2013/2014 47
Telemedicina<br />
This is…<br />
…TELECARE<br />
Informatica Medica 2013/2014 48
Applicazioni di telemedicina<br />
• Telemedicina come fattore chiave per evoluzione del Sistema Sanitario<br />
Punto di<br />
riferimento<br />
degli ospedali<br />
periferici del<br />
proprio bacino<br />
geografico<br />
Collegato ad uno<br />
o più Centri di<br />
Eccellenza ai<br />
quali inviare i<br />
casi complessi<br />
Punto di<br />
riferimento<br />
del paziente<br />
sul territorio<br />
Richiesta di servizi<br />
migliori limitando<br />
costi e spostamenti<br />
Informatica Medica 2013/2014 49
Sistemi di telemedicina<br />
• Come funziona:<br />
1) Paziente: misura i parametri vitali attraverso gli apparati di<br />
telemedicina e registra i dati relativi all’esame;<br />
trasmette i dati alla centrale operativa con un normale<br />
collegamento telefonico o via cellulare GSM.<br />
Informatica Medica 2013/2014 50
Sistemi di telemedicina<br />
2) Operatori: guidano gli utenti attraverso tutte le<br />
fasi di accesso al servizio, acquisiscono ed<br />
elaborano i dati, che vengono immediatamente<br />
inoltrati allo specialista che opera all’interno della<br />
centrale operativa per la valutazione medica e la<br />
refertazione.<br />
Informatica Medica 2013/2014 51
Sistemi di telemedicina<br />
3) Centrale operativa: attiva 24 ore su 24, è<br />
dedicata alla ricezione, gestione ed archiviazione<br />
dei dati clinici e delle immagini diagnostiche ed<br />
alla loro refertazione da parte di medici specialisti.<br />
Deve garantire l’accesso in modalità sicura alle<br />
informazioni relative al singolo paziente e<br />
permettere la condivisione dei dati clinici con la<br />
possibilità di intervento in urgenza in ogni<br />
momento.<br />
Informatica Medica 2013/2014 52
Sistemi di telemedicina<br />
4) Specialista: emette il referto, lo trasmette al medico<br />
richiedente e lo allega all’archivio digitale dei dati<br />
clinici del paziente.<br />
5)Medico curante: via web in tempo reale ha a<br />
disposizione i dati e la relativa reportistica del paziente.<br />
Informatica Medica 2013/2014 53
Telemedicina<br />
Informatica Medica 2013/2014 54
Applicazioni di telemedicina<br />
• Telecardiologia:<br />
In molti ospedali gli ECG vengono effettuati dagli infermieri del reparto di<br />
cardiologia, che si devono spostare per i reparti con l‘ECG tradizionale. Lo<br />
spostamento da un reparto all'altro comporta perdita di energie e di tempo.<br />
In questo ambito, si può installare una centrale di telecardiologia nel reparto<br />
di cardiologia e dotare tutti gli altri reparti di un registratore/trasmettitore<br />
ECG. in questo modo basterà una telefonata in centrale per ottenere una<br />
refertazione in tempo reale.<br />
Spesso le configurazioni geografiche di alcuni territori non facilitano il<br />
controllo sanitario. In questi contesti, il compito di raggiungere i degenti<br />
sperduti, che necessitano di cure e di esami specifici, viene delegato ai<br />
medici di base. Dotare i medici di tecnologia avanzata che permetta di<br />
trasmettere esami elettrocardiografici in tempo reale, con possibilita' di<br />
intervento immediato, risulta risolutorio ed efficace.<br />
Informatica Medica 2013/2014 55
Applicazioni di telemedicina<br />
• Teleradiologia<br />
(1)Teleconsulto radiologico: attività di consulenza a<br />
distanza tra Medici, generalmente da due siti comunicanti<br />
per via telefonica o su reti informatiche più o meno<br />
dedicate. Nella sua forma più semplice si avvale solo dello<br />
scambio di informazioni e di quesiti. L’utilizzo anche delle<br />
immagini richiede particolari attrezzature che ne<br />
consentano la trasmissione in maniera corretta.Oltre ad una<br />
rete telefonica interna ospedaliera, la divisione di Radiologia di<br />
può disporre di una rete locale dedicata, organizzata in due<br />
distinte LAN che garantiscono l’una l’impenetrabilità dei dati<br />
clinici (LAN ospedaliera), l’altra l’accessibilità da parte di<br />
docenti e studenti (LAN universitaria).<br />
Informatica Medica 2013/2014 56
Applicazioni di telemedicina<br />
2)TELEDIAGNOSI:<br />
Si tratta di una diagnosi radiologica effettuata su immagini<br />
provenienti da distanza con la tecnologia che supporta la<br />
teleradiologia; tutti gli elementi anamnestici e clinici necessari<br />
per poter elaborare un referto conclusivo risultano<br />
obbligatoriamente allegati. Come nel caso del teleconsulto,<br />
vanno elaborati dei protocolli operativi concordati e condivisi da<br />
tutti gli operatori coinvolti nella Telediagnosi, accettati e<br />
formalizzati con atti ufficiali.<br />
Grazie ad una LAN sicura e dalle buone prestazioni gli specialisti<br />
radiologi possono far fronte all’ultima fase dell’atto clinico<br />
radiologico ovvero alla diagnosi che viene effettuata grazie alla<br />
visione di immagini provenienti a distanza da altre sedi sia intra- che<br />
extra-aziendali, con la tecnologia supportata dalla teleradiologia.<br />
Informatica Medica 2013/2014 57
Applicazioni di telemedicina<br />
• De-ospedalizzazione: (es. INTESA)<br />
Dopo un intervento cardiologico di una certa rilevanza, è<br />
necessario monitorare il paziente per un certo periodo di<br />
tempo. Di solito si dimette il paziente, fissando già i giorni<br />
delle successive visite, ma ciò non sempre è possibile, in<br />
quanto le liste d'attesa sono sempre affollate. Mettendo, invece,<br />
a disposizione del paziente un registratore/trasmettitore ECG, è<br />
possibile effettuare dei controlli in tempo reale, permettendo<br />
all' equipe medica di intervenire tempestivamente qualora<br />
sorgesse qualche complicazione<br />
Informatica Medica 2013/2014 58
Applicazioni di telemedicina<br />
• Tele-pronto-soccorso:<br />
Quando, con le ambulanze, vengono affrontati casi di<br />
emergenza, può essere utile conoscere, prima di giungere al<br />
pronto soccorso, le condizioni del soccorso nella situazione<br />
contingente. Avere a disposizione, nelle ambulanze e nelle<br />
auto mediche, strumenti medici dotati di<br />
registratore/trasmettitore, permette di conoscere subito la<br />
situazione del soccorso, in modo da predisporre nel modo<br />
migliore l'accoglienza dei medici del pronto soccorso<br />
Informatica Medica 2013/2014 59
E-care per anziani<br />
1 - Far comunicare il<br />
mondo del cittadino<br />
(Anziano) con quello<br />
dei servizi pubblici, in<br />
particolare dei servizi<br />
pubblici sanitari e sociali<br />
2 - Far comunicare<br />
le Reti di assistenza e<br />
solidarietà tra di loro<br />
Reti<br />
di<br />
Solidarietà<br />
Persona<br />
Anziana<br />
e - Care<br />
Reti Private di<br />
Servizio<br />
Sanità<br />
Servizi Sociali<br />
Pubblici<br />
Informatica Medica 2013/2014 60
E-care per famiglie<br />
Rete multiservizi per bisogni sanitari, di salute, assistenziali e di<br />
sicurezza per:<br />
Offrire nuovi e-Services di informazione, prenotazione,<br />
assistenza, telemedicina, home care, integrando i servizi<br />
prodotti da aziende pubbliche e private (no-profit e pro profit)<br />
per dare ai cittadini nuove opportunità<br />
Porre la Telematica al servizio del cittadino: dal telefono alla<br />
larga banda per servizi di e-Welfare alla famiglia<br />
Informatica Medica 2013/2014 61
Composizione della Rete e-Care<br />
e-Sanità<br />
e-Welfare<br />
e-Booking<br />
(Sistemi Cup e<br />
sportelli<br />
telematici)<br />
Telemedicina<br />
Teleassistenza<br />
(e-Services<br />
sanitari e<br />
assistenziali)<br />
Informazioni on<br />
line<br />
(e-Information)<br />
Informatica Medica 2013/2014 62
Esempio (1)<br />
SET DI CONTROLLO 1<br />
(IMMAGINI PET, SPECT)<br />
SET DI CONTROLLO 2<br />
(IMMAGINI PET, SPECT)<br />
…<br />
SET DI CONTROLLO n<br />
(IMMAGINI PET, SPECT)<br />
ANALISI<br />
STATISTICA<br />
Immagine<br />
del soggetto<br />
patologico<br />
(PET or SPECT)<br />
www.neu<br />
roinf.it<br />
ANALISI<br />
STATISTICA<br />
dell’immagine<br />
inserita<br />
Informatica Medica 2013/2014 63
Esempio (2)<br />
Sviluppo di un sistema integrato di<br />
e-health per<br />
pazienti diabetici<br />
Informatica Medica 2013/2014 64
Obiettivi<br />
• monitorare lo stato di salute dei pazienti affetti da<br />
diabete tramite la richiesta di invio al call-center di dati<br />
medici<br />
• trasmettere ai pazienti le fondamentali informazioni sul<br />
diabete, consigliare loro le abitudini e gli stili di vita<br />
adeguati, una dieta specifica e le attività fisiche da<br />
svolgere<br />
Informatica Medica 2013/2014 65
Il diabete mellito<br />
• Disturbo del metabolismo dello zucchero legato alla<br />
scarsa produzione (d. insulino dipendente) o<br />
all’incapacità di utilizzo (d. non insulino dipendente)<br />
di insulina, necessaria al passaggio del glucosio<br />
all’interno della cellula<br />
• 1.700.000 pazienti in Italia, costo pari al 6% della<br />
spesa sanitaria nazionale<br />
• 170.000.000 di diabetici nel mondo<br />
• Cause della malattia : sconosciute<br />
• Complicazioni: arterosclerosi, cardiomiopatia,<br />
infezione delle vie urinarie, cataratta, gastroenterite…<br />
Informatica Medica 2013/2014 66
Metodi: Clinical Trials<br />
Durata: 6 mesi<br />
Criteri di inclusione nel set di studio (30 pazienti nel gruppo di<br />
controllo e 30 in quello di intervento) :<br />
• Età> 18 & < 70<br />
• Diabete mellito riscontrato<br />
• Aumento dell’indice di massa corporea<br />
• Consenso a partecipare allo studio<br />
Informatica Medica 2013/2014 67
Metodi: Clinical Trials<br />
Fase 1:<br />
- collezione dei dati epidemiologici<br />
- educazione del gruppo di intervento<br />
Fase 2:<br />
- soggetti controllati tramite electtronic medical<br />
devices<br />
(glucometro, monitoraggio della pressione<br />
sanguigna, strumentazione per ECG e registrazione<br />
peso corporeo)<br />
- 5 soggetti dotati di telefono WAP<br />
Informatica Medica 2013/2014 68
Metodi: Clinical Trials<br />
Dati medici richiesti dal call center system :<br />
• Peso, livello di zucchero nel sangue, pressione sistolica,<br />
pressione diastolica, quantità extra di insulina, numero<br />
di episodi di ipoglicemia<br />
Messaggio educativo relativo a :<br />
• Conoscenza e prevenzione, livello di zucchero nel sangue,<br />
dieta e attività<br />
Informatica Medica 2013/2014 69
Metodi: Descrizione del Sistema<br />
• Personal Computer (Pentium III)<br />
• Firewall product<br />
• Strong anti-virus product<br />
• Windows 2000 + Linux Debian ambiente con:<br />
Apache as Web Server<br />
PHP as web script language<br />
MySQL as Database<br />
Informatica Medica 2013/2014 70
Metodi: Descrizione del Sistema<br />
Data Monitoring through WAP<br />
Edit box where to<br />
Simple multiple choice question<br />
write health measurements<br />
Informatica Medica 2013/2014 71
Metodi: Descrizione del Sistema<br />
Informatica Medica 2013/2014 72
Risultati :<br />
Soddisfazione del soggetto<br />
WAP<br />
very useful useful no useful no answer<br />
2%<br />
7%<br />
WEB<br />
very useful useful no useful no answer<br />
1% 3%<br />
40%<br />
51%<br />
31%<br />
65%<br />
Informatica Medica 2013/2014 73
Utilità<br />
Salute<br />
Disponibile<br />
Dappertutto<br />
In ogni momento<br />
Informatica Medica 2013/2014 74