Come interrogare un database con ASP ADO

ASP e Database
a cura di Manuel Cavalieri - Pubblicato il 22 luglio 1999 - Categoria: ASP: Mail e database
Versione stampabile
Commenta questo articolo
Giudizio della community - Difficoltà: 2,78 - Utilità: 3,72 - Contenuti: 3,35 [386]
Questo articolo appartiene al tutorial Database
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>