Pagine ASP parte 3 I data base Stefano Schacherl.

30
Pagine ASP parte 3 I data base Stefano Schacherl Stefano Schacherl

Transcript of Pagine ASP parte 3 I data base Stefano Schacherl.

Page 1: Pagine ASP parte 3 I data base Stefano Schacherl.

Pagine ASPparte 3

I data base

Stefano SchacherlStefano Schacherl

Page 2: Pagine ASP parte 3 I data base Stefano Schacherl.

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.

Page 3: Pagine ASP parte 3 I data base Stefano Schacherl.

3 I DataBase

ADO contiene:

7 oggetti:

• Connection• Command• Parameter• Recordset• Field• Property• Error

4 collezioni:• Fields• Properties• Parameters• Errors

Page 4: Pagine ASP parte 3 I data base Stefano Schacherl.

4 I DataBase

Gli oggetti più importanti sono Connection e RecordSet, che sono tra loro legati dal metodo Execute di Connection:

Page 5: Pagine ASP parte 3 I data base Stefano Schacherl.

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.

Page 6: Pagine ASP parte 3 I data base Stefano Schacherl.

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)

Page 7: Pagine ASP parte 3 I data base Stefano Schacherl.

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();

Page 8: Pagine ASP parte 3 I data base Stefano Schacherl.

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=…") .

Page 9: Pagine ASP parte 3 I data base Stefano Schacherl.

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.

Page 10: Pagine ASP parte 3 I data base Stefano Schacherl.

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.

Page 11: Pagine ASP parte 3 I data base Stefano Schacherl.

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");

Page 12: Pagine ASP parte 3 I data base Stefano Schacherl.

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.

Page 13: Pagine ASP parte 3 I data base Stefano Schacherl.

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("cognome") + "<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.

Page 14: Pagine ASP parte 3 I data base Stefano Schacherl.

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

Page 15: Pagine ASP parte 3 I data base Stefano Schacherl.

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.

Page 16: Pagine ASP parte 3 I data base Stefano Schacherl.

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.

Page 17: Pagine ASP parte 3 I data base Stefano Schacherl.

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.

Page 18: Pagine ASP parte 3 I data base Stefano Schacherl.

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.

Page 19: Pagine ASP parte 3 I data base Stefano Schacherl.

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.

Page 20: Pagine ASP parte 3 I data base Stefano Schacherl.

20 SQL

Esempi di ricerca:SELECT * FROM nominativiSELECT * FROM nominativi WHERE id > 3 SELECT * FROM nominativi WHERE id > 3 AND id < 15 SELECT * FROM nominativi WHERE nome = 'Carlo' SELECT nome,cognome FROM nominativi WHERE nome LIKE 'carlo' SELECT * FROM nominativi WHERE nome LIKE '%carlo' SELECT * FROM nominativi WHERE nome LIKE '%carlo%' SELECT * FROM nominativi WHERE nome LIKE '%carlo%' ORDER BY cognomeSELECT * FROM nominativi WHERE nome LIKE '%carlo%' ORDER BY cognome DESC

Page 21: Pagine ASP parte 3 I data base Stefano Schacherl.

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

Page 22: Pagine ASP parte 3 I data base Stefano Schacherl.

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'

Page 23: Pagine ASP parte 3 I data base Stefano Schacherl.

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.

Page 24: Pagine ASP parte 3 I data base Stefano Schacherl.

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'"

Page 25: Pagine ASP parte 3 I data base Stefano Schacherl.

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’)"

Page 26: Pagine ASP parte 3 I data base Stefano Schacherl.

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'");

Page 27: Pagine ASP parte 3 I data base Stefano Schacherl.

27 L'oggetto RecordSetVediamo 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();

Page 28: Pagine ASP parte 3 I data base Stefano Schacherl.

28 L'oggetto RecordSetCancellazione 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();

Page 29: Pagine ASP parte 3 I data base Stefano Schacherl.

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:

Page 30: Pagine ASP parte 3 I data base Stefano Schacherl.

30 ESERCITAZIONE

MENU (html)

visualizza

aggiungi

cancella

modifica

Modulo (ricerca tutto o ricerca secondo

criteri) (html)

Modulo (inserimento record) (html)

Modulo (visualizza tutto e scelta record da cancellare) (html)

Modulo (visualizza tutto e scelta record da modificare) (html)

Pagina ASP

Pagina ASP

Pagina ASP

Pagina ASP