Pagine ASP parte 3 I data base Stefano Schacherl.

Post on 02-May-2015

233 views 0 download

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

Pagine ASPparte 3

I data base

Stefano SchacherlStefano 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.

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("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.

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

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] = 'carlo@tin.it'

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

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

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

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