Accesso ai database con ADO e ODBC
Le tecniche software che consentono di inviare comandi ad un sistema DB e ricevere i
risultati coinvolgono concetti e componenti precisi.
Terminologie
•
•
•
Una origine dati è un componente software che fornisce un accesso strutturato ai dati.
ODBC è una origine dati che fornisce l’accesso a molti sistemi DB relazionali tra i quali
MSAccess e MSSQL Server.
ADO (MS ActiveX Data Object) fornisce una interfaccia di programmazione tra una
pagina web di DB e varie origini di dati, rendendo disponibili un vasto assortimento di
oggetti, metodi e proprietà.
Data Flow
1. Un’utente invia una richiesta al server web
2. Il server web riceve la richiesta, rileva che si tratta di una pagina ASP e avvia il
processore degli script ASP.
3. Il processore degli script ASP legge la pagina richiesta ed esegue tutto il codice lato
server trovato
4. Il codice istanzia, carica vari oggetti ADO ed eseguire i comandi (ne usa i metodi), per
accedere alle origini dati disponibili sul server.
5. L’origine dati (ad esempio ODBC) fornisce dei metodi per aprire il DB, le sue tabelle,
elaborare comandi SQL, ecc. ADO accede a molti DB relazionali tramite ODBC.
6. ADO invia i comandi ad un provider di dati elaborandoli direttamente oppure
indirettamente attraverso una origine dati. Il provider può essere MSSQL o MSAccess.
7. L’origine dati accede infine al DB e restituisce i risultati al modulo chiamante.
Oggetti ADO
Le proprietà e i metodi ADO utilizzano una gran quantità di costanti; per agevolare la
leggibilità del codice è preferibile inserire queste costanti, in luogo dei valori. Il file
adovbs.inc contiene la dichiarazione di queste costanti e si trova in c:\programmi\file
comuni\system\ado; per utilizzare correttamente questo file occorre copiarlo nella cartella
eseguibile che viene utilizzata per contenere i file .asp e includere la seguente riga prima
del primo blocco di codice script lato server (prima del tag <%).
< ! - #include file=”.. / adovbs.inc” - >
Connessione ai Database
Coinvolge quattro operazioni:
•
Creazione:
viene utilizzato per generare un oggetto
Set crea1=Server.CreateObject(“ADODB.Connection”). Server è un
oggetto che viene creato nell’ambiente di scripting ASP, CreateObject è un metodo che
•
•
•
crea gli oggetti, la stringa ADODB.Connection indica al metodo CreateObject quale tipo
di oggetto creare.
Apertura
la creazione di un oggetto non apre la comunicazione immediatamente con il DB, ma
occorre utilizzare il metodo Open
Connection.Open ConnectionString, UserID, Password
dei tre metodi solo il primo è obbligatorio
nome= "miodbase"
crea1.Open nome
Chiusura
per chiudere un oggetto basta eseguire il metodo Close
crea1.Close
Rilascio
anche se chiuso, un oggetto rimane in memoria; per rimuoverlo occorre usare
l’istruzione Nothing
Set crea1=Nothing
Accesso alle tabelle e ai record
L’oggetto Recordset ha la funzionalità fondamentale di elaborare tabelle, i record e i
campi; questo oggetto è probabilmente il più importante e fornisce l’unica metodologia
ADO per scambiare i dati tra un provider di dati e la pagina web di database.
•
•
•
Creazione:
per utilizzare un oggetto occorre innanzi tutto crearlo
Set record1=Server.CreateObject("ADODB.Recordset")
Apertura
la creazione di un oggetto RecordSet non connette l’oggetto a un provider di dati e non
recupera alcuna stringa di connessione valida
record1.Open sql,crea1.adOpenforwardOnly, adLockReadOnly,
adCmdText
l’esempio potrebbe essere letto in questo modo: apri l’oggetto record1, ottieni il suo
insieme dei risultati inviando il testo del comando nella variabile sql al provider di dati
referenziato dall’oggetto Connection crea1; non è possibile spostarsi all'indietro nel
recordset e non si intendono aggiornare i dati che producono il risultato
Spostamento
Dopo aver aperto un recordset, la maggior parte dei provider lo posizionano sul primo
record;
record1.MoveFirst
record1.MoveLast
record1.MoveNext
record1.MovePrev
record1.Move Numerorecord, start
Numerorecord è un numero (positivo o negativo) che specifica di
quanti record spostarsi partendo dal record corrente (se start=0
start facoltativo)
EOF e BOF sono impostati TRUE se rispettivamente si è posizionati sull'ultimo e sul
primo record
•
Accesso ai campi
Per usufruire delle informazioni di un record non basta posizionarsi sul record stesso
ma occorre accedere all'insieme Fields del recordset, il quale contiene un oggetto
Field per ciascun campo dell'insieme dei risultati del recordset.
Record1.Fields(index).Property
index è il nome del campo o la sua posizione ordinale
property è una proprietà che assume vari nomi: Value restituisce il valore di un campo,
Type restituisce il formato del campo
alcune possibili combinazioni della sintassi del comando:
Record1.Fields("ditta").Value
campo="ditta"
risultato= Record1.Fields(campo).Value
for i= 0 to record1.Fields.Count –1
Response.Write "<td>"&record1.Fields(i)&"</td>
next
l'istruzione Response.Write invia il codice HTML al browser del visitatore
•
Modificare un record
Per modificare un record occorre aprire una connessione al DB, aprire un recordset
che contiene il record che si desidera modificare, posizionarsi sul record da modificare,
modificare il contenuto del campo desiderato, usare il metodo UpDate o un metodo di
spostamento ed infine chiudere il recordset e la connessione al db
•
Aggiunta di un record
Per aggiungere un record occorre utilizzare il metodo AddNew del recordset e
successivamente eseguire il metodo Update
•
Eliminazione di un record
Posizionarsi sul record e utilizzare il metodo Delete
•
Chiusura e deallocazione dalla memoria
dopo aver utilizzato un oggetto, se non si ha intenzione di riutuilizzarlo, occorre
chiuderlo e liberare la memoria che occupava
recordes1.Close
set recordset1=Nothing