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