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