Integrazione Web-DBMS (web-dbms, mag'11) Open Database Connettivity (ODBC) una tecnologia parte di Microsoft Data Access Components (MDAC) per l’accesso ai DBMS interfaccia a basso livello C++ inclusa nei S.O. Microsoft permette tt l’ l’accesso aii dati d ti d da qualsiasi l i i applicazione li i indipendentemente dal DBMS inserimento di un middleware (il database driver) tra applicativo e DBMS usa SQL come linguaggio di manipolazione ed accesso ai dati usato da DAO (interfaccia a livello applicativo) Integrazione web-DBMS Gianluca Ramunno < [email protected] > Politecnico di Torino Dip. Automatica e Informatica ODBC Open Database Connectivity (ODBC) application Open Database Connectivity (ODBC) application driver driver driver driver data source data source data source SqlServer oracle xls ODBC Driver in configurazione single-tier sullo manager (DLL) i driver su richiesta dell’applicazione driver (DLL) elabora le chiamate ODBC ricevute dal Driver Manager il driver manager e i driver appaiono all’applicazione come un unico blocco data source DBMS, rete, SO su cui gira il DBMS carica driver manager ODBC Driver in configurazione single-tier stesso sistema risiedono: application driver The image cannot be display ed. Your computer may not hav e enough memory to open the image, or the image may hav e been corrupted. Restart y our computer, and then open the file again. If the red x still appears, y ou may hav e to delete the image and then insert it again. manager driver software per accesso ai dati (data access software) storage esistono due configurazioni: stand alone network data ODBC © A.Lioy, G.Ramunno - Politecnico di Torino (2004-2011) stand-alone network ODBC K-1 Integrazione Web-DBMS (web-dbms, mag'11) Driver in configurazione multiple-tier sul Driver in configurazione multiple-tier sistema client risiedono: application The image cannot be display ed. Your computer may not hav e enough memory to open the image, or the image may hav e been corrupted. Restart y our computer, and then open the file again. If the red x still appears, y ou may hav e to delete the image and then insert it again. driver manager driver sul sistema server risiedono: per accesso ai dati (data access software) data storage software ODBC ODBC Driver multiple-tier con gateway OLE DB esiste un processo gateway le richieste al data access software talvolta effettua anche una “traduzione” tecnologia instrada Microsoft (MDAC) inclusa nei S.O. di ODBC interfaccia COM (Component Object Model) per fornire alle applicazioni un accesso uniforme a dati da fonti diverse DBMS relazionali DBMS non relazionali (novità) file system, mail system, fogli di calcolo, directory, … non limitato a SQL interfaccia a basso livello C++ OLE DB evoluzione The image cannot be display ed. Your computer may not hav e enough memory to open the image, or the image may hav e been corrupted. Restart y our computer, and then open the file again. If the red x still appears, y ou may hav e to delete the image and then insert it again. ODBC OLE DB OLE DB consumer consumer applicazioni che attraverso l’interfaccia OLE DB manipola dei dati provider intermediario i t di i che h mette tt a di disposizione i i id dati ti espone metodi OLE DB non tutti i provider hanno le stesse capacità, dipende da quali metodi OLE DB implementano applicazione o tool interfaccia OLE DB OLE DB ODBC File Native provider OLE DB © A.Lioy, G.Ramunno - Politecnico di Torino (2004-2011) OLE DB K-2 Integrazione Web-DBMS (web-dbms, mag'11) applicazione o tool Esempio di provider OLE DB Jet interfaccia OLE DB 4.0 è il motore di Access nativo OLE DB provider applicazione OLE.ODBC interface OLE DB interface OLE DB OLE DB interface ODBC Driver Manager Text File ODBC Driver Jet 4.0 interfaccia proprietaria database database database simple provider native provider native provider OLE DB ODBC provider OLE DB applicazione o tool ADO (ActiveX Data Object) ADO middleware con interfaccia ad oggetti evoluzione di DAO mette a disposizione l’interfaccia OLE DB a linguaggi diversi dal C++ è un wrapper di OLE DB ad d un lilivello ll applicativo li ti può essere usato con diversi linguaggi all’interno di programmi utente compilati (VisualBasic) macro in applicazioni come MS-Office (VisualBasic for Application - VBA) WSH: script console (Jscript, VBscript) ADO pagine ASP in IIS (Jscript, VBscript) OLE DB interface OLE.ODBC interface OLE DB inteface OLE DB interface text file database simple provider native provider ODBC driver manager ODBC driver database ADO ODBC provider ADO: modello ad oggetti Oggetti ADO Connection Connection Recordset object una sessione con una sorgente dati Command object usato per definire un comando specifico come una query SQL verso una sorgente t dati d ti Recordset object rappresenta un insieme di record di una tabella intera o del risultato di una query composto da righe (record) e colonne (field) rappresenta Fields Field Command Properties Parameters Property Parameter Properties Property Errors Error ADO © A.Lioy, G.Ramunno - Politecnico di Torino (2004-2011) ADO K-3 Integrazione Web-DBMS (web-dbms, mag'11) Oggetti ADO Record Oggetti & collection ADO object una riga di dati corrisponde ad un singolo record di un recordset Field object rappresenta una colonna di dati corrisponde ad una colonna di un recordset Parameter object rappresenta un parametro associato ad un oggetto command (es. parametri per stored procedure) Error object di un eventuale errore avvenuto in un operazione col provider Fields collection contiene ti ttutti tti glili oggetti tti Field Fi ld di un recordset d t Errors collection contiene tutti gli oggetti Error generati da un operazione non riuscita col un provider Parameters collection contiene tutti gli oggetti Parameter di un command ADO ADO rappresenta dettagli Connection Connection Mode modalità Provider Connection Open ConnectionString Execute Mode Close metodi proprietà ADO Recordset di apertura del DB è il default per avere read-write con.Mode d = adModeReadWrite d d d i Execute (stringSQL) restituisce RS read-only con cursore forward-only se si vogliono altre proprietà, non usare con.Execute ma rs.Open Close ADO chiude la connessione read-only Recordset: metodo open Open Close AddNew Delete EOF ObjRS.Open ( Source, ActiveConnection, CursorType, LockType, option ); Recordset MoveFirst I d Index MoveLast MoveNext proprietà MovePrevious Update metodi ADO © A.Lioy, G.Ramunno - Politecnico di Torino (2004-2011) apertura di un recordset Source: comando SQL, nome di tabella, stored procedure ActiveConnection: un oggetto di tipo Connection, oppure una stringa di connessione CursorType: tipo di cursore sul RS risultante Locktype: tipo di lock sui dati ADO Option: interpretazione di Source K-4 Integrazione Web-DBMS (web-dbms, mag'11) CursorType adOpenUnspecified Recordset: metodo AddNew Unspecified type of cursor. adOpenForwardOnly This improves performance when only (default) one pass through a RS is needed. Like a dynamic cursor, except that you can't see records that other users add, adOpenKeyset p y although g records that other users delete are inaccessible from your RS. Data changes by other users are still visible. Additions, changes, and deletions by adOpenDynamic other users are visible, and all types of movement through the RS are allowed. A static copy of a set of records that you can use to find data or generate reports. adOpenStatic Additions, changes, or deletions by other users are not visible. ADO ADO modello di operazione (query) creare un oggetto ADO connessione la connessione verso un DBMS creare un oggetto ADO recordset aprire il recordset manipolare i dati nel recorset chiudere il recordset chiudere la connessione rimuovere gli oggetti aggiunta di un record // se la tabella non e' già accessibile ... objRS.Open("utenti", conString, adOpenDynamic, adLockPessimistic); // aggiunta del record objRS.AddNew(); objRS("Nome") = "Alberto"; objRS("Cognome") = "Rossi"; objRS.Update(); ADO ADO: esempio ASP/JScript (query) creazione ed apertura connessione aprire <% @LANGUAGE="JScript" %> <!--#include file="adojavas.inc"--> <% var con; var conString; con = Server.CreateObject("ADODB.Connection"); conString = "Provider=Microsoft.Jet.OLEDB.4.0; " + "Data Source= c:\\webdata\\mydb.mdb "; con.Open(conString); %> ADO ADO: esempio ASP/Jscript (query) creazione ed apertura recordset ADO ADO: esempio ASP/JScript (query) estraggo <% ; var rst; var sSQLString; rst = Server.CreateObject("ADODB.Recordset"); sSQLString = "Select * from Customers"; rst = con.Execute(sSQLString); %> i dati dal recordset rst <% while (!rst (!rst.EOF) EOF) { Response.write(rst("Name") + "<BR>"); rst.MoveNext( ); } %> ADO © A.Lioy, G.Ramunno - Politecnico di Torino (2004-2011) ADO K-5 Integrazione Web-DBMS (web-dbms, mag'11) ADO: esempio ASP/JScript (query) chiudo recordset & connessione Accesso a DB con path relativo col metodo Server.MapPath <% @LANGUAGE="JScript" %> <% var con; var conString; <% rst.Close( ); con.Close( ); rst = null; con = null; %> con = Server.CreateObject("ADODB.Connection"); conString = "Provider = Microsoft.Jet.OLEDB.4.0; " + "Data Source = " + Server.MapPath("./mydb.mdb"); con.Open(conString); . . . ADO ADO: esempio di update tramite SQL creazione ed apertura connessione ADO ADO: esempio di update tramite SQL aggiunta chiusura <% @LANGUAGE="JScript" %> <!--#include file="adojavas.inc"--> <% var con; var conString; con = Server.CreateObject("ADODB.Connection"); conString = "Provider=Microsoft.Jet.OLEDB.4.0; " + "Data Source=c:\\webdata\\mydb.mdb"; con.Open(conString); %> record al DB (tramite SQL) connessione <% var sSQLString = "INSERT INTO tBooks (Title, Description, Category) VALUES ('DB Design','How to design a database', 3);" con.Execute(sSQLString); con.Close( ); con = null; %> ADO ADO: esempio di update tramite recordset creazione ed apertura connessione e recordset <% @LANGUAGE="JScript" %> <!--#include file="adojavas.inc"--> <% var con = Server.CreateObject("ADODB.Connection"); var rst = Server.CreateObject("ADODB.Recordset"); // apertura connessione var conString = "Provider=Microsoft.Jet.OLEDB.4.0; " + "Data Source=c:\\webdata\\mydb.mdb"; con.Mode = adModeReadWrite; con.Open(conString); // apertura recordset rst.Open("tBooks",conString,adOpenDynamic,adLockPessimistic); %> © A.Lioy, G.Ramunno - Politecnico di Torino (2004-2011) ADO ADO: esempio di update tramite recordset aggiunta chiusura record al DB (tramite recordset) connessione <% // aggiunta del record rst AddNew(); rst.AddNew(); rst("Title") = "DB Design"; rst("Description") = "How to design a database”; rst("Category") = 3; rst.Update(); // chiusura recordset e connessione rst.Close(); con.Close( ); rst = null; con = null; %> ADO K-6 Integrazione Web-DBMS (web-dbms, mag'11) Parole riservate (keyword) JDBC si possono verificare errori se i nomi delle tabelle o delle colonne coincidono con keyword di ASP o del linguaggio di scripting usato (es. value) per evitare questi errori basta racchiudere il nome parentesi quadre q (es. ( [ value ] ) tra p ADO Java API che permette ai programmi Java di eseguire comandi SQL simile a ODBC ma sviluppato appositamente per Java, ODBC (tramite ADO) funziona con tutti i g gg linguaggi attuale versione: 4.0 http://java.sun.com/javase/technologies/database/ JDBC applicazione o tool (Java) JDBC interface (API) JDBC Driver Manager JDBC-ODBC bridge pure JDBC driver interfaccia proprietaria ODBC Driver Manager ODBC Driver database database JDBC © A.Lioy, G.Ramunno - Politecnico di Torino (2004-2011) K-7