ASP e Database
A cura di Michele Cavalieri
(fonte http://www.aspitalia.com/articoli/db/introduzione.aspx )
Un aspetto fondamentale di ASP è l'utilizzo dei componenti, che non sono altro che
ActiveX come quelli che si possono creare con Visual Basic, Visual C++, Visual J++ ,
Delphi, eccetera.
Il più utile tra tutti i componenti ASP è il Database Access, detto anche ActiveX Data
Object (ADO). Nella pubblicazione di database su Web si utilizza questo componente e gli
oggetti in esso contenuti per leggere e scrivere su fonti dati ODBC ( Open Database
Connectivity).
Come interrogare un database con ASP
•
•
•
•
un database;
il driver OBDC di Access97 (contenuto nel file ODBCJT32.DLL) o quello di
SQLServer;
conoscenza di ADO;
conoscenza di SQL;
ADO
Come detto prima, ADO è lo strumento necessario per operare sulla fonte di dati ODBC (il
vostro database). Di questo componente bisogna assolutamente conoscere l'oggetto
Connection, indispensabile per il suo utilizzo.
L'oggetto Connection viene creato tramite il metodo CreateObject dell'oggetto Server e
utilizza una variabile per ricevere il riferimento ad un'oggetto. Una volta creato, l'oggetto
Connection può essere utilizzato per aprire una connessione con qualsiasi fonte di dati
ODBC.
Sorgente di dati ODBC di Windows
Quest'operazione avviene con l'ODBC Data Source Administrator, generalmente
localizzato nel Pannello di controllo. La realizzazione della sorgente di dati avviene
selezionando la pagina System DNS nel property sheet ODBC data source Administrator.
In questa pagina premere il pulsante Add... per visualizzare un elenco di tutti i driver
ODBC disponibili. Dopo aver selezionato il driver ODBC appropriato premere il pulsante
Finish che introduce un nuovo oggetto.
Il codice seguente stabilisce una connessione con una fonte di dati ODBC Microsoft
Access Driver chiamata Registrazioni.
<%
' dichiaro la variabile che conterrà l'oggetto Connection
Dim conn
'creo l'oggetto Connection
Set conn = Server.CreateObject("ADODB.Connection")
'apro la connessione con la fonte di dati
conn.Open "Registrazioni"
%>
Connessione DSN-less
In alcuni casi, ad esempio per non costringere il proprio amministratore a creare una
quantità elevata di sorgenti ODBC, è possibile creare, ma solo nel caso in cui il database
sia Access, una connessione DSN-less.
Tutto quello per compiere un'operazione di questo tipo è usare al posto del codice
precedente, quest'altro:
<%
' dichiaro la variabile che conterrà l'oggetto Connection
Dim conn
'creo l'oggetto Connection
Set conn = Server.CreateObject("ADODB.Connection")
'apro la connessione con la fonte di dati
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq="&Server.MapPath("/data/database.mdb")
%>
Naturalmente al posto di "/data/database.mdb" va inserito l'esatto percorso di ricerca in cui
è stato salvato il file mdb.
Ed ora...
Una volta aperta la connessione con la fonte di dati, è possibile utilizzare un oggetto
Recordset per recuperare le informazioni. L'oggetto Recordset consente di eseguire le
istruzioni SQL restituendo un insieme di record filtrati tramite la query. Come l'oggetto
Connection, Recordset viene creato utilizzando l'oggetto Server.
<%
' dichiaro la variabile che conterrà l'oggetto Recordset
Dim rs
'creo l'oggetto Recordset
Set rs = Server.CreateObject("ADODB.Recordset")
'Eseguo la query SQL SELECT
rs.Open "SELECT *", conn
%>
Dopo aver recuperato i record è possibile leggerli con i metodi MoveFirst, MoveLast,
MoveNext e MovePrevious. Il metodo Write dell'oggetto Response consente di dare in
output i dati sulla pagina in HTML.
<TABLE>
<%
Do While not rs.EOF
%>
<TR>
<TD><% rs.Fields("colonna").Value %></TD>
</TR>
<%
rs.MoveNext
Loop
%>
</TABLE>
Esempi di interrogazioni semplici
La paginazione
Spesso una query restituisce molte più righe di quante possano essere visualizzate. Ad
esempio un motore di ricerca Internet può avere migliaia di riferimenti rispetto alla parola
chiave cercata ed è chiaro che non è consigliabile visualizzare tutti i dati in un'unica
pagina.
La paginazione consente di distribuire i risultati su più pagine. ADO supporta la
paginazione tramite le proprietà PageSize, PageCount a AbsolutePage dell'oggetto
recordset.
La proprietà PageSize specifica quante ennuple devono essere contenute nella pagina, e
tramite la proprietà PageCount, è possibile determinare il numero complessivo di pagine.
E' Possibile accedere ad una determinata pagina tramite la proprietà AbsolutePage. Il
programma richiede un solo file ASP per eseguire tutto il processo di navigazione.
Esempio di interrogazione con paginazione
Cosa conoscere di SQL
SQL (che si pronuncia siquel) è l'abbreviazione di Structured Query Language e
rappresenta lo standard per la definizione, l'interrogazione e l'aggiornamento di database
relazionali. In questo tutorial mi limiterò nel spiegare la più semplice e generale struttura
del linguaggio SQL.
Le istruzioni in SQL vengono raggruppate a blocchi; ciascun blocco contiene tre tipi di
clausole, la clausola SELECT, la clausola FROM, e la clausola WHERE.
SELECT nomi di attributi
FROM nomi di relazioni
WHERE condizione di ricerca sui dati,
Ad esempio, l'interrogazione per trovare il valore di IDENTIFICATIVO per l'azienda
TRANSISTOR è espressa come segue:
SELECT IDENTIFICATIVO
FROM AZIENDE
WHERE NOMEAZIENDA = TRANSISTOR
Le tre clausole individuano rispettivamente:
1. Gli attributi da includere nel risultato.
2. Le relazioni su cui operare.
3. La condizione di ricerca. In particolare, questa condizione potrebbe essere più
complessa e coinvolgere al suo interno altri blocchi.
Un'altra importante parola chiave è DISTINCT che prevede l'eliminazione delle ripetizioni
dai risultati. Si utilizza immediatamente dopo la parola chiave SELECT.
SELECT DISTINCT Provincia
FROM Indirizzo
Le condizioni elementari che compaiono nella clausola WHERE possono avere altre
forme, oltre a quelle già viste per l'operatore di selezione. Esse sono le seguenti.
•
•
•
<attributo> BETWEEN <valore> AND <valore>.
<attributo> IN (<lista di valori>).
<attributo> LIKE <stringa incompleta>.
I primi due casi selezionano rispettivamente i records in cui il valore dell'attributo è uguale
ad uno dei valori elencati nella lista, e i records in cui il valore dell'attributo è compreso fra i
due valori specificati o uguale ad uno di essi.
IN seleziona i records della relazione in cui il valore dell'attributo sia uno di quelli elencati
nella lista di valori.
La parola chiave LIKE esegue un confronto selezionando i records in cui l'attributo
specificato nella stringa <stringa incompleta> ha come valore una stringa che può essere
rappresentara dalla stringa incompleta.
Molto comoda è la parola chiave COUNT, che calcola il numero di records oppure il
numero di valori distinti che soddisfano una certa condizione.
L'inserimento
Le operazioni di inserimento vengono specificate per mezzo dell'istruzione INSERT che
ha due possibili strutture:
INSERT INTO <nome relazione> (<lista attributi>)
VALUES (<lista valori>)
INSERT INTO <nome relazione> (<lista attributi>)
SELECT (<lista valori>)
Esempio di inserimento di dati
L'eliminazione
L'eliminazione di records viene specificata per mezzo dell'istruzione DELETE.
DELETE FROM <nome relazione>
WHERE <condizione>
che elimina dalla relazione tutti i records che soddisfano la condizione.
La modifica
La modifica di records viene specificata per mezzo dell'istruzione UPDATE.
UPDATE <nome relazione>
SET <attributo> = <espressione>
<attributo> = <espressione>
<attributo> = <espressione>
.......
WHERE <condizione>