27.06.2014 Views

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

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

Saved successfully!

Ooh no, something went wrong!