Corso ASP/ Lezione 8: Database Access

Corso ASP/ Lezione 8: Database Access

ActiveX Data Object può essere sfruttato per fornire tutti i dati di cui ha bisogno un sito Web
ActiveX Data Object può essere sfruttato per fornire tutti i dati di cui ha bisogno un sito Web


Roma – I componenti di Asp sono normali componenti ActiveX. I componenti che prendiamo in esame in queste “lezioni” sono i cinque forniti da Microsoft.

Anche se è difficile dire quale sia tra tutti il componente più importante, con ActiveX Data Objects è molto utile saper interagire perché permette di leggere e scrivere dati direttamente su di un database.

Questo componente permette infatti di connettersi con ogni fonte dati ODBC per rendere accessibili i contenuti direttamente dalle pagine del nostro sito.

ActiveX Data Objects (ADO) ha a disposizione sette oggetti che permettono di interagire con i record nel nostro database:

– Connection
– Recordset
– Command
– Parameter
– Field
– Property
– Error

e quattro tipi di Collection

– Fields
– Properties
– Parameters
– Errors

ADO lavora bene con moltissimi database. Tuttavia è possibile che alcuni di questi non supportino alcune proprietà o metodi degli oggetti ADO. Il database “suggerito” da Microsoft è, ovviamente, MS SQL Server. Comuqnue anche Access si comporta discretamente per siti non troppo grandi e affollati!


L’accesso ad una connessione con un database è fornito dall’oggetto Connection (“ADODB.Connection”). Questi permette al nostro codice di aprire il database in modo che sia poi poissibile effettuare operazioni di lettura o di scrittura.

Per generare un istanza di Connectiom dobbiamo chiamare l’ oggetto Asp “Server” che, appunto, permette di creare altri oggetti.

<%
Dim ObjConnection ‘dichiaro la variabile

SET ObjConnection = Server.CreateObject(“ADODB.Connection”)
ObjConnection.Open “FILEDSN=miodsn.dsn” ‘apro la connessione
%>

Dopo aver impostata la variabile oggetto ObjConnection utilizzando SET, apro la connessione invocando il metodo Open dell’oggetto Connection. I parametri forniti al metodo Open possono essere diversi. In questo esempio abbiamo chiamato un file dsn contenente le informazioni ODBC che individua la nostra fonte dati. Il file è residente nel computer server nella directory dedicata ai FileDSN (questo file si può generare cercando nel pannello di controllo la voce ODBC 32).

Può essere utilizzato anche un DSN di sistema o una connessione DSN-Less. Ogni approccio è differente ed offre soluzioni diverse nei vari scenari in cui si può utilizzare ADO. Per Internet il miglior metodo sembra comunque il DSN-Less, che fornisce direttamente tutti i parametri senza leggerli da un file (file DSN) o dal registro del server (System DSN)

E’ importante, mentre si struttura il codice per la pagina, tenere presente che è utile chiudere la connessione il prima possibile, distruggendo la variabile oggetto. Per chiudere una connessione è sufficiente scrivere:

<%
ObjConnection.Close
Set ObjConnection = Nothing ‘distruggo la variabile
%>


Recordset permette di andare a leggere o scrivere dati sul database. Per poter utilizzare l’oggetto Recordset di ADO dobbiamo prima aver aperto una connessione con il database utilizzando l’oggetto Connection.

<%
Dim ObjConnection

Set ObjConnection = Server.CreateObject(“ADODB.Connection”)
ObjConnection.Open “FILEDSN=miodsn.dsn”

Dim ObjRecordset
Set ObjRecordset = Server.CreateObject(“ADODB.Recordset”)
ObjRecordset.Open “SELECT * FROM DATI;”, ObjConnection,1

%>

Con questo codice abbiamo aperto una connessione con il database, abbiamo creato un nuovo oggetto Recordset (“ADODB.Recordset”) che contiene tutti i record della tabella “DATI”.

La stringa SQL (Struttured Query Language) può essere generata con un “builder”. Tuttavia SQL non è particolarmente complesso e utilizza, normalmente, solo pochi comandi (SELECT, UPDATE, INSERT, WHERE, ORDER BY, GROUP BY, ecc.)

Il metodo Open dell’oggetto Recordest permette di inserire vari argomenti. Il primo è una stringa SQL che richiama i record che si vuole visualizzare; il secondo, separato da una virgola, è un riferimento alla connessione aperta; il terzo importante argomento da inviare al metodo Open di un recordset è il tipo di cursore.

Il valore “1” alla fine del metodo Open del recordset indica il cursore “Keyset” con il quale apriamo il Recordset.

Con il cursore si può scegliere di leggere solo i record sequenzialmente oppure potersi muovere avanti e indietro nel nostro database. L’approfondimento di questo argomento è la prossima pagina di questa lezione.

Il nostro Recordset, aperto sulla connessione “ObjConnection”, è ora pronto per restituire dati da inserire all’interno di una pagina Asp.

Per accedere ad un elemento del set di record richiamato dal database è sufficiente fare riferimento all’oggetto chiamando il campo del record:

<%=ObjRecordset(“NomeCampo”)%>

E’ possibile spostarsi tra i record utilizzando le funzioni MoveNext, MovePrevious, MoveFirst e MoveLast. Oppure creare dei cicli FOR-NEXT o WHILE-WEND utilizzando la funzioni EOF e BOF, con le quali saprete quando siete all’inizio della tabella (BOF) o alla fine (EOF).

Quando apriamo un Recordset, il record corrente viene posizionato automaticamente al primo record e le proprietà EOF e BOF dell’oggetto Recordset vengono impostate su False. Se non esistono record le due proprietà saranno impostate a True.

Per chiudere e distruggere un recordset:

<%
ObjRecordset.Close
Set ObjRecordset = Nothing
%>



Come abbiamo visto, quando vogliamo aprire un Recordset dobbiamo anche fornire un “Cursore”, ovvero una modalità per scorrere i record.

Esistono almeno quattro importanti cursori:

– Dynamic (2): consente di vedere i cambiamenti, le aggiunte o le cancellazioni effettiuate da altri utenti. Offre completo supporto alla navigazione tra i record. Supporta i bookmarks dei record se il provider (il database che utilizziamo) ne prevede l’utilizzo. (Volendo utilizzare una costante piuttosto del valore numerico potremmo dichiarare nel nostro codice: “Const adOpenDynamic = 2”)

– Forward-only (0): ha le caratteristiche di Dynamic ma limita il movimento all’interno del recordset ad un solo “scroll” in avanti. (Volendo utilizzare una costante piuttosto del valore numerico potremmo dichiarare nel nostro codice: “Const adOpenForwardOnly = 0”)

– Keyset (1): funziona come il Dynamic ma previene la vista di record aggiunti da altri utenti e previene l’accesso a record cancellati. Restano visibili solo le modifiche ai record effettuate da altri utenti. Permette il movimento tra i record e l’utilizzo di Bookmark. (Volendo utilizzare una costante piuttosto del valore numerico potremmo dichiarare nel nostro codice: “Const adOpenKeyset = 1”)

– Static (3): offre una vista statica dei record. Permette di muoversi nel recordset e di utilizzare i Bookmark. Nessuna possibilità di vedere le modifiche o le aggiunte effettuate da altri utenti. (Volendo utilizzare una costante piuttosto del valore numerico potremmo dichiarare nel nostro codice: “Const adOpenStatic = 3”)

La scelta del Cursore opportuno permette di creare recordset più “leggeri” e di diminuire il rischio di errori. La valutazione del giusto Cursore dipende esclusivamente dal tipo di funzione che vogliamo eseguire.


Interagire con i database non è semplice ed intuitivo come potrebbe essere l’accesso diretto ai file (tema della prossima lezione).

Però credo che convenga “superare l’ostacolo” arrivando ad avere una buona padronanza di ADO e dei suoi componenti. L’accesso a dati su database è conveniente per una miriade di ragione, prima fra tutte la semplicità di indicizzazione.

Il mio consiglio è quello di utilizzare gli strumenti presentati in queste pagine per fare una semplice prova. Poi è possibile dare uno sguardo ai Riferimenti Web qui sotto per trovare approfondimenti ed esempi.

ADO potrebbe anche diventare, alla fine, l’unico componente ASP utilizzato in una complessa struttura Web…

Franco Lavarone

Link copiato negli appunti

Ti potrebbe interessare

Pubblicato il
22 ott 2000
Link copiato negli appunti