Un database è un insieme di dati strutturati in cui è possibile effettuare ricerche e modifiche.
Le operazioni fondamentali che si possono eseguire su un database sono: inserimento, ricerca, aggiornamento e cancellazione.
I dati memorizzati nei database vengono raccolti in tabelle.
Le tabelle vanno immaginate come delle matrici bidimensionali (righe e colonne). L'incrocio tra una riga ed una colonna rappresenta un dato del database. Le righe sono chiamate record, le colonne campi.
I database possono essere composti da più tabelle.
Come si possono gestire i database con ASP?
Si utilizza ADO (ActiveX Data Objects):
ADO consente di scrivere un'applicazione per la gestione e l'accesso ai dati contenuti in un server di database tramite un provider OLE DB. Poiché tuttavia ciascun provider dispone di caratteristiche uniche, le modalità di interazione tra l'applicazione e ADO variano leggermente a seconda del provider stesso. Di seguito tratteremo il provider Microsoft OLE DB per ODBC.
Stabilito a priori il provider da utilizzare si deve stabilire una connessione al database, quindi introduciamo l'oggetto CONNECTION.
L'oggetto Connection rappresenta una connessione aperta a una fonte dati.
Per creare questo oggetto bisogna utilizzare la seguente sintassi:

<%
Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
%>

Una volta creato l'oggetto lo dobbiamo configurare (indicare quale è la nostra fonte dati e dove si trova fisicamente) utilizzando la proprietà ConnectionString. Sintassi:

<%
objConn.ConnectionString="DRIVER={Microsoft Access Driver (*.mdb)};DBQ="& _
Server.MapPath("database.mdb")
%>

Non ci rimane che aprire la connessione con

<%objConn.Open%>

E' possibile evitare l'utilizzo della proprietà ConnectionString utilizzando la seguente sintassi:

<%
objConn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & _
Server.MapPath("database.mdb")
%>

Molta importanza riveste la chiusura della connessione, alla fine delle operazioni eseguite su una fonte dati, per non collassare il server. Queste operazione libera la parte di memoria associata alla connessione. Per fare ciò si deve chiudere la connessione e distruggere l'oggetto connection creato

<%
objConn.Close
Set objConn = Nothing
%>

Ora che sappiamo come gestire una connessione non ci resta che manipolare il nostro database.
Introduciamo l'oggetto RECORDSET: un oggetto Recordset rappresenta il set di record estratti da una tabella del databse interrogato. La sintassi per creare l'oggetto RecordSet è la seguente:


<%
Dim objRS
Set objRS = Server.CreateObject("ADODB.RecordSet")
%>

Per poter popolare il nostro RecordSet con i record di una tabella bisogna utilizzare il metodo OPEN

<%objRS.Open Fonte, ConnessioneAttiva, TipoCursore, TipoBlocco, Opzioni%>

dove Fonte rappresenta un elemento Variant che restituisce un nome di variabile oggetto Command valido, un'istruzione SQL, un nome di tabella, una chiamata di una stored procedure oppure il nome del file di un recordset protetto (opzionale); ConnessioneAttiva rappresenta l'elemento Variant che restituisce un nome di variabile oggetto Connection valido (nel nostro caso è objConn) o un elemento String contenente i parametri ConnectionString (opzionale); TipoCursore rappresenta il valore CursorTypeEnum che determina il tipo di cursore che il provider deve utilizzare quando apre il Recordset (è opzionale). Tale valore può essere una delle costanti che seguono:
adOpenForwardOnly Apre un cursore a scorrimento in avanti (impostazione predefinita);
adOpenKeyset Apre un cursore direzionabile;
adOpenDynamic Apre un cursore dinamico;
adOpenStatic Apre un cursore statico;
TipoBlocco rappresenta il valore LockTypeEnum che determina il tipo di blocco o concorrenza che il provider deve utilizzare quando apre il recordset (è opzionale). Tale valore può essere una delle costanti che seguono:
adLockReadOnly Sola lettura;
adLockPessimistic Il provider esegue le operazioni necessarie per assicurare la corretta modifica dei record, in genere vincolando i record nella fonte dati in fase di modifica;
adLockOptimistic Il provider utilizza il blocco ottimistico, vincolando i record solo quando viene chiamato il metodo Update;
adLockBatchOptimistic Aggiornamento batch ottimistico - Richiesto per la modalità di aggiornamento batch in contrapposizione con la modalità di aggiornamento immediato;
Opzioni rappresenta il valore Long che indica come il provider deve valutare l'argomento Fonte se questo non rappresenta un oggetto Command o che il recordset deve essere ripristinato da un file in cui era stato precedentemente salvato (è opzionale).
Utilizziamo il seguente esempio per sintetizzare gli argomenti trattati sino ad ora:
abbiamo un database di nome mydb.mdb contente una tabella di nome Utenti composta da due campi (Nome e Cognome) e vogliamo che ne vengano rappresentati a video tutti i record.


10 <%
20 Dim objConn
30 Set objConn = Server.CreateObject("ADODB.Connection")
40 objConn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & _
50 Server.MapPath("mydb.mdb")
60
70 Dim objRS
80 Set objRS = Server.CreateObject("ADODB.RecordSet")
90 objRS.Open "Utenti", objConn
...

Il mio RecordSet è stato popolato con tutti i record presenti nella tabella Utenti di mydb.mdb;
come fare per rappresentarli a video?
Quando si apre un Recordset, il record corrente corrisponde al primo record se disponibile, mentre le
proprietà BOF e EOF vengono impostate a False. Se non sono disponibili record, l'impostazione per BOF
e EOF è True.
È possibile utilizzare i metodi MoveFirst, MoveLast, MoveNext, MovePrevious e Move, e le proprietà
AbsolutePosition, AbsolutePage e Filter per riposizionare il record corrente, purché il provider supporti
la relativa funzionalità. Gli oggetti Recordset a scorrimento in avanti supportano solo il metodo MoveNext.
Quando si utilizzano i metodi Move per visualizzare ciascun record o enumerare il Recordset, è possibile
utilizzare le proprietà BOF ed EOF per verificare se è stato superato l'inizio o la fine del Recordset.
Quindi per scorrere il RecodSet utilizzeremo il metodo MOVENEXT e la proprietà EOF (End Of File)


...
100 Do While Not objRS.EOF
110 Response.Write objRS("Nome") & " " & objRS("Cognome")
120 objRS.MoveNext
130 Loop
140 objRS.Close
150 Set objRS = Nothing
160
170 objConn.Close
180 Set objConn = Nothing
190 %>

come per la connessione anche il RecordSet va chiuso e distrutto per liberare la memoria associata.
Si è visto come implementare un database in una pagina ASP (Connection e RecordSet). Vedremo in altre occasioni come aggiornare, inserire o cancellare dati dai nostri database.