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