ASP e Database
Introduzione
Asp esprime le sue massime potenzialità nell'interazione con i database. Grazie a questa interazione è possibile sviluppare potenti applicazioni in cui conservare, inserire, modificare e leggere dati, sfruttando semplici comandi SQL. Asp utilizza il driver ODBC (Open Database Connectivity) e l'oggetto ADO (ActiveX Data Object) per stabilire connettività tra un database ed una semplice pagina (o complessa applicazione) Asp. I principali (R)DBMS con cui Asp può interagire sono i classici di casa Microsoft, ovvero Ms Access e Sql Server, ma è possibile interagire anche con prodotti come mySql, Oracle ed altri.
In questa sede ci utilizzeremo Ms Access (preferibilmente versione 2000) per implementare i nostri esempi.
Introduzione ad ADO
Come già detto, grazie all'oggetto ADO è possibile manipolare i dati di una fonte di dati ODBC. In questa fase daremo un'occhiata alle principali caratteristiche di ADO, esaminando i suoi oggetti con relativi metodi e proprietà.
L'oggetto principale tra le varie collezioni di ADO è Connection che offre connettività tra un database ed una pagina Asp. E' possibile creare un'istanza dell'oggetto Connection in una variabile, ad esempio Cn, utilizzando il seguente codice:
var Cn = new Server.CreateObject("ADODB.Connection");
oppure con la classica sintassi JScript
var Cn = new ActiveXObject("ADODB.Connection");
La classe che permette di creare un'istanza dell'oggetto Connection è quindi ADODB.Connection.
I principali metodi di Connection sono Open(), Execute() e Close() che si occupano rispettivamente di aprirà la connessione verso un database, di eseguire un comando SQL e di chiudere la connessione in questione. Vedremo un esempio in seguito, appena spiegati altri concetti teorici fondamentali.
Le principali proprietà di Connection sono ConnectionTimeout, che permette di stabilire in secondi quanto deve durare una connessione, e Version che restituisce la versione di ADO che si sta utilizzando.
Altro oggetto fondamentale di ADO è Recordset, la cui collezione utilizzata all'atto della creazione di una nuova istanza dell'oggetto è ADODB.Recordset.
var Rs = new Server.CreateObject("ADODB.Recordset");
oppure con la classica sintassi JScript
var Rs = new ActiveXObject("ADODB.Recordset");
Abbiamo memorizzato nella variabile Rs l'istanza dell'oggetto creato.
L'oggetto Recordset dispone fondamentalmente di una proprietà ed un metodo, ovvero la proprietà EOF (End Of File - lo analizzeremo in seguito) e del metodo MoveNext() che muove il cursore di ADO sul record successivo; analogamente i metodi MovePrevious(), MoveFirst() e MoveLast() muovono il cursore del Recordset rispettivamente verso il record precedente, il primo e l'ultimo; ad ogni modo esistono anche i metodi Open() e Close().
Un semplice esempio di lettura dei dati
Per sviluppare un semplice esempio iniziale, creiamo file Access e chiamiamolo database.mdb; al suo interno la tabella anagrafe composta dai campi id (di tipo Contatore), nome e cognome (entrambi di tipo Testo); salviamo la tabella senza impostare nessuna chiave primaria quando richiesto. inseriamo qualche dato all'interno della tabella, ed il database è pronto!
Creiamo una nuova pagina Asp e chiamiamola lettura.asp ed inseriamo il seguente codice:
<%@LANGUAGE = JScript%> <% var Cn = new ActiveXObject("ADODB.Connection"); var StrCn = "driver={Microsoft Access Driver (*.mdb)}; dbq=" + Server.MapPath("database.mdb"); Cn.Open(StrCn); var Sql = "SELECT * FROM anagrafe"; var Rs = Cn.Execute(Sql); if (Rs.EOF) Response.Write("Nessun dato presente"); else while (!Rs.EOF) { Response.Write("<p>Nome: " + Rs("nome") + " <br>Cognome: " + Rs("cognome") + "</p>"); Rs.MoveNext(); } Cn.Close(); %>
Il codice appena presentato effettua i seguenti passi:
1. crea l'oggetto Connection e si connette al database mediante la stringa di connessione (StrCn)
var Cn = new ActiveXObject("ADODB.Connection"); var StrCn = "driver={Microsoft Access Driver (*.mdb)}; dbq=" + Server.MapPath("database.mdb");
2. Apre la connessione
Cn.Open(StrCn);
3. Esegue una stringa SQL
var Sql = "SELECT * FROM anagrafe"; var Rs = Cn.Execute(Sql);
Non a caso ho utilizzato il nome Rs come variabile per memorizzare l'esecuzione della stringa SQL: il metodo Execute() pur se non associato esplicitamente ad un oggetto Recordset, fa comunque parte della sua collezione.
4. Verifica che nel database ci siano dati (record)
if (Rs.EOF) Response.Write("Nessun dato presente");
Anche in questo caso vale il discorso che la proprietà EOF, anche se non associata esplicitamente ad un oggetto Recordset, fa comunque parte della sua collezione.
5. In caso ci siano dati nel database, esegue un ciclo while per tirare fuori tutti i record presenti
else while (!Rs.EOF) { Response.Write("Nome: " + Rs("nome") + "
"); Rs.MoveNext(); }
Cognome: " + Rs("cognome") + "
6. Chiude la connessione
Cn.Close();
Un semplice esempio di scrittura dei dati
Vediamo adesso come sfruttare l'oggetto Recordset per inserire dati nella stessa tabella dello stesso database creato in precedenza.
Di seguito il codice della pagina inserimento.asp
<%@LANGUAGE = JScript%> <% var Cn = new ActiveXObject("ADODB.Connection"); var StrCn = "driver={Microsoft Access Driver (*.mdb)}; dbq=" + Server.MapPath("database.mdb"); Cn.Open(StrCn); var Rs = new ActiveXObject("ADODB.Recordset"); Rs.Open("anagrafe",Cn,3,3); Rs.AddNew(); Rs("nome") = "Luca"; Rs("cognome") = "Ruggiero"; Rs.Update(); Rs.Close(); Cn.Close(); %>
Anche in questo caso creiamo l'oggetto Connection ed apriamo la connessione al database, chiudendola alla fine delle operazioni. Analizziamo adesso più nel dettaglio il codice per l'inserimento dei dati mediante l'oggetto Recordset:
var Rs = new ActiveXObject("ADODB.Recordset"); // Crea l'oggetto Recordset Rs.Open("anagrafe",Cn,3,3); // Apre il recordset specificando la tabella, la connessione e dei parametri opzionali Rs.AddNew(); // Il metodo AddNew() predispone il Recordset all'inserimento di nuovi dati Rs("nome") = "Luca"; // Inserisco dati nel campo "nome" Rs("cognome") = "Ruggiero"; // Inserisco dati nel campo "cognome" Rs.Update(); // Aggiorno il Recordset: attenzione, Update non sta per modifica dei dati, ma per refresh Rs.Close(); // Chiudo il Recordset
Autore: Luca Ruggiero
AutoCAD
Corso base del noto software per il disegno geometrico professionale.Webmaster Base
Per imparare i trucchi del mestiere di un Webmaster.Flash MX
Corso sul più famoso programma multimediale disponibile sul mercato.Visual Basic 6
Imparare a programmare col noto linguaggio di casa Microsoft.Javascript e DHTML
Lo scripting lato client con Javascript adatto a qualsiasi livello di esperienza.SQL e Database
Corso completo di guida al linguaggio SQL e ricco di esempi pratici.Front Page
Corso completo sul noto editor HTML della Microsoft.VBA
Gestire documenti Microsoft Office (Word, Excel ed Acces).Web Marketing
Corso come promuove un sito Web su Internet.Webmaster Avanzato
Percorso completo volto a formare dei professionisti del Web.
![MRW Corsi online](../img/ads-60x60/box/MRW-Corsi-Logo.gif)