Stefano Schacherl
Pagine ASP
parte 3
I data base
2
I DataBase
Con ASP è possibile interfacciare uno script ad una fonte
di dati che rispetti lo standard detto ODBC (Open
Database Connectivity).
L'accesso ad essi avviene grazie all'oggetto ActiveX
Data Object (abbreviato ADO), che fornisce connettività
verso tutti i tipi di database che supportino ODBC,
mediante un driver apposito.
In ASP è praticamente prassi l'utilizzo dei database di
Access, non a caso prodotto sempre da Microsoft.
3
I DataBase
ADO contiene:
7 oggetti:
• Connection
• Command
• Parameter
• Recordset
• Field
• Property
• Error
4 collezioni:
• Fields
• Properties
• Parameters
• Errors
4
I DataBase
Gli oggetti più importanti sono Connection e RecordSet,
che sono tra loro legati dal metodo Execute di
Connection:
5
L'oggetto Connection
ADODB è il tramite necessario per operare nelle pagine
ASP, sia in lettura che in scrittura, su una fonte di dati
ODBC.
L'oggetto ActiveX che si occupa di fornire la connettività
verso un database è Connection, che va dichiarato
come un qualsiasi ActiveX:
var ADOConn = new
ActiveXObject("ADODB.Connection");
Tramite il riferimento ADOConn diventa possibile
accedere a metodi e proprietà dell'oggetto Connection.
6
L'oggetto Connection
L'oggetto Connection possiede numerose proprietà e
metodi, tra i quali più importanti sono:
Proprietà:
ConnectionString (Contiene le informazioni utilizzate
per stabilire una connessione a una fonte dati)
Metodi:
Open (Apre una connessione a una fonte dati)
Execute (Esegue la particolare istruzione SQL passata al
metodo mediante un parametro stringa)
Close (Chiude un oggetto aperto)
7
L'oggetto Connection
Riassumendo:
• per utilizzare l'oggetto Connection:
var ADOConn = new
ActiveXObject("ADODB.Connection");
• per aprire il database:
ADOConn.Open(strConn);
passandogli un parametro strConn opportuno
• per eseguire operazioni SQL sul database:
var ris = ADOConn.Execute(sql);
passandogli un parametro sql opportuno
• per chiudere il database:
ADOConn.Close();
8
L'oggetto Connection
La stringa strConn (stringa di connessione) che si deve
passare al metodo open in
ADOConn.Open(strConn); è costituita da una serie di
coppie chiave=valore, separate tra di loro con un punto
e virgola.
Nel caso tipico è necessario inserire in tale stringa due
chiavi, che indicano:
• il formato di database utilizzato ("driver=…")
• la sua locazione fisica nel file system del server
("dbq=…") .
9
L'oggetto Connection
Ad esempio:
var strConn = "driver={Microsoft Access
Driver (*.mdb)}; dbq=" +
Server.MapPath("mio.mdb");
E anche possibile passare altre informazioni (chiavi) nella
stringa di connessione, ad esempio una password.
10
L'oggetto Connection
Ci sono altre modalità di collegamento al database
possibili; è possibile ad esempio registrare il database
nell' ODBC del server assegnandogli un DSN (da
pannello di controllo, icona ODBC, "DSN di sistema",
ecc.) in modo da assegnargli un nome virtuale al nostro
database, così da semplificare la stringa di connessione:
var strConn = "nome_virtuale_db";
Per fare questo, però, bisogna avere accesso al Server e,
ovviamente, non è sempre possibile.
11
L'oggetto RecordSet
Il metodo Execute, come visto nell'esempio:
var ris = ADOConn.Execute(sql);
restituisce un riferimento ad un oggetto di tipo Recordset
(che viene quindi creato automaticamente), che
rappresenta una collezione di record del database.
Ad esempio, con
var ris = ADOConn.Execute("SELECT * FROM
nominativi");
l'oggetto ris contiene tutti i campi di tutti i record presenti
nella tabella nominativi del database.
E' però possibile creare un oggetto RecordSet
direttamente, che contenga l'intero db:
ris = new ActiveXObject("ADODB.Recordset");
12
L'oggetto RecordSet
I Recordset possono essere immaginati come vere e
proprie tabelle di dati, dove ogni riga corrisponde ad un
record, un po' come nella rappresentazione visuale di
Access.
I valori dei singoli campi del record evidenziato dal
cursore sono leggibili tramite l'utilizzo della sintassi:
ris("nome_campo")
Per poter visualizzare i dati della tabella è quindi possibile
sfruttare i metodi e le proprietà degli oggetti Recordset.
13
L'oggetto RecordSet
Nell'esempio seguente viene mostrato l'uso di EOF e
MoveNext:
while (!ris.EOF) {
Response.Write("Record n° " + ris("id")
+ "<br>");
Response.Write("Nome: " + ris("nome") +
"<br>");
Response.Write("Cognome: " + ris("cognom
e") + "<br>");
ris.MoveNext(); }
Quando si crea l'oggetto RecordSet si posiziona un
"cursore" sulla prima riga della tabella; MoveNext() è il
metodo che consente l'avanzamento alla riga successiva.
La proprietà EOF (boolean) segnala la fine della tabella.
14
L'oggetto RecordSet
Metodi principali:
• AddNew
• Close
• Delete
• Find
• Move
• MoveFirst - MoveLast
• MoveNext - MovePrevious
• Open
• Seek
• Update
Proprietà principali:
• BOF (primo record del recordset)
• EOF (ultimo record del recordset)
• Index
15
Usare l'oggetto RecordSet o SQL?
Per quel che riguarda le operazioni di ricerca,
inserimento, modifica e cancellazione ci sono due
"filosofie":
1. Si usa una stringa SQL nel metodo Execute
dell'oggetto Connection per eseguire tutte le operazioni;
si usa il RecordSet ottenuto da una ricerca solo per la
visualizzazione.
2. Si crea un oggetto RecordSet e su di esso si fanno
tutte le operazioni volute.
16
Usare l'oggetto RecordSet o SQL?
Nel primo caso si possono fare operazioni complesse
(ricerca tutti i record dove …, cancella il record nel quale
il nome è ...) con la scrittura di un'espressione SQL.
Nel secondo caso si utilizzano le normali strutture di
programmazione per la ricerca sul RecordSet, gestito in
modo analogo ad un array di record.
Noi utilizzeremo il primo metodo.
17
SQL
Vediamo quindi come si eseguono ricerche, inserimenti,
modifiche o cancellazioni su un database, utilizzando una
stringa SQL nel metodo Execute dell'oggetto Connection.
Dopo aver dichiarato un oggetto Connection ADOConn, si
utilizza il metodo Execute:
var ris = ADOConn.Execute(sql);
passandogli una stringa sql, contenente un'istruzione
SQL da eseguire. Cioè all'interno di questa stringa viene
dichiarato al metodo Execute cosa fare.
18
SQL
SQL (Structured Query Language) è un linguaggio che
rappresenta lo standard per la definizione,
l'interrogazione e la modifica dei database.
La conoscenza dell'SQL esula dagli scopi di questo
corso, ma per poter realizzare qualche applicazione è
necessario vederne almeno qualche esempio.
19
SQL
Recupero dati o interrogazioni (query) in SQL
SELECT [<lista-colonne> | * ]
FROM <lista-tabelle>
[WHERE <condizione>]
La condizione della clausola WHERE può essere una
condizione semplice o composta, mediante gli operatori
AND OR e NOT, da predicati semplici, in cui ciascun
predicato rappresenta un confronto tra due valori.
20
SQL
Esempi di ricerca:
SELECT * FROM nominativi
SELECT * FROM nominativi WHERE id >
SELECT * FROM nominativi WHERE id >
id < 15
SELECT * FROM nominativi WHERE nome
'Carlo'
SELECT nome,cognome FROM nominativi
nome LIKE 'carlo'
SELECT * FROM nominativi WHERE nome
'%carlo'
SELECT * FROM nominativi WHERE nome
'%carlo%'
SELECT * FROM nominativi WHERE nome
'%carlo%' ORDER BY cognome
SELECT * FROM nominativi WHERE nome
'%carlo%' ORDER BY cognome DESC
3
3 AND
=
WHERE
LIKE
LIKE
LIKE
LIKE
21
SQL
Operazioni di aggiornamento in SQL
INSERT INTO <nome-tabella> [(<listanomi-colonne>)]
VALUES (<listavalori-colonne>)
Es:
INSERT INTO STUDENTI VALUES
(‘Anna’,‘Turchese’,355773,’IF’,’Via Piave,
7 - Treviso’)
DELETE FROM <nome-tabella>
WHERE <condizione>
Es:
DELETE FROM STUDENTI WHERE
Matricola=333878
22
SQL
Operazioni di aggiornamento in SQL
UPDATE <nome-tabella> SET <nome-attributo> =
[<espressione> {, <nome-attributo> = <espressione>]
[WHERE <condizione>]
Es:
UPDATE STUDENTI
SET Codice = ‘IN’
WHERE Matricola > 400001
UPDATE nominativi
SET [e-mail] = '[email protected]'
WHERE nome = 'Carlo' AND cognome = 'Rossi'
23
Riassunto
PER INIZIARE:
• Si deve creare un'istanza dell'oggetto Connection:
var ADOConn = new
ActiveXObject("ADODB.Connection");
• si apre quindi il database:
var strConn = "driver={Microsoft Access
Driver (*.mdb)}; dbq=" +
Server.MapPath("mio.mdb");
ADOConn.Open(strConn);
n.b: ADOConn e strConn sono nomi di variabili,
mio.mdb è il nome (con il percorso relativo) del
database.
24
Riassunto
PER LEGGERE E VISUALIZZARE:
• Si deve usare il metodo Execute dell'oggetto
Connection:
var ris = ADOConn.Execute("SELECT * FROM
nominativi");
• Si visualizzare i campi dell'oggetto ris :
while (!ris.EOF) {
Response.Write(ris("nome") + "<br>");
Response.Write(ris("cognome") + "<br>");
ris.MoveNext(); }
n.b: ovviamente la stringa SQL può estrarre anche una
selezione di record (o di campi), ad esempio:
"SELECT * FROM nominativi WHERE nome =
'Carlo'"
25
Riassunto
PER INSERIRE UN RECORD:
• Si deve usare il metodo Execute dell'oggetto
Connection:
var ris = ADOConn.Execute("INSERT INTO
nominativi VALUES (‘Anna’,‘Turchese’,’Via
Piave, 7 - Treviso’)");
n.b: nella stringa i valori dei campi devono essere inseriti
tutti, a meno di inserire i nomi dei campi:
("INSERT INTO nominativi (nome,cognome)
VALUES (‘Anna’,‘Turchese’)"
26
Riassunto
PER CANCELLARE UNO O PIU' RECORD:
• Si deve usare il metodo Execute dell'oggetto
Connection:
var ris = ADOConn.Execute ("DELETE FROM
nominativi WHERE nome='Anna'");
PER MODIFICARE UNO O PIU' RECORD:
• Si deve usare il metodo Execute dell'oggetto
Connection:
var ris = ADOConn.Execute ("UPDATE
STUDENTI SET nome = ‘Anna Maria’ WHERE
cognome = 'Turchese'");
27
L'oggetto RecordSet
Vediamo come fare se si desidera utilizzare l'oggetto
RecordSet.
Per iniziare (vale per tutti gli esempi):
var ADOConn = new
ActiveXObject("ADODB.Connection");
ADOConn.Open(strConn);
RS = new ActiveXObject("ADODB.Recordset");
RS.Open("tabella",ADOConn,3,3);
Al termine ci dovrà essere: RS.Close();
Inserimento nuovo Record:
RS.AddNew;
RS("nome")="Pippo";
…
RS.Update();
28
L'oggetto RecordSet
Cancellazione del Record nella posizione 3:
RS.Move(2);
RS.Delete;
Modifica di un campo del Record nella posizione 2:
RS.Move(1);
RS("e-mail") = "pippo.it";
RS.Update();
Modifica del record nel quale un campo ha un
determinato valore:
while (RS("nome")!="Carlo") {
RS.MoveNext(); }
RS("nome")="GianCarlo";
RS.Update();
29
ESERCITAZIONE
Progetto proposto:
RUBRICA TELEFONICA / E-MAIL (realizzata con
database) - o un altro db a piacere
nb.: si dovrebbe realizzare una pagina base (HTML) che
consenta di scegliere l'operazione desiderata (lista
completa, ricerca, modifica, inserimento nuovi dati e
cancellazione), attivando quindi la pagina (HTML) con un
modulo che richiami una pagina asp opportuna:
30
ESERCITAZIONE
visualizza
aggiungi
MENU
(html)
cancella
modifica
Modulo (ricerca tutto
o ricerca secondo
criteri) (html)
Pagina
ASP
Modulo (inserimento
record) (html)
Pagina
ASP
Modulo (visualizza
tutto e scelta record
da cancellare) (html)
Pagina
ASP
Modulo (visualizza
tutto e scelta record
da modificare) (html)
Pagina
ASP