...Personalizza la tua HomePage...

Questa Sezione è Dedicata a Tutti i Webmaster Nofiti e Non

Versione Stampabile Versione PDF Versione .DOC Versione .ZIP Scrivimi i tuoi Commenti

ASP e Database - Introduzione -
Autore :   Linguaggio :  ASP - Active Server Pages
Data :  06/11/2003 17:48:50 Accessi :  32
Uno delle peculiarità che ha portato ASP ad una vasta diffusione consiste nella facilità con la quale è possibile interfacciare uno script ad una fonte di dati che rispetti lo standard detto ODBC (Open Database Connectivity).

La connettività verso fonti di dati ODBC permette di realizzare con il minimo sforzo un innumerevole quantitativo di applicazioni, che spazia dal semplice guestbook fino ad arrivare a potenti interfacce di ricerca su cataloghi online.

In pratica grazie ai database diventa semplice la catalogazione di lunghe moli di dati e facile l'accesso ad essi grazie all'oggetto ActiveX Data Object (abbreviato ADO), che fornisce connettività verso tutti i tipi di database che supportino ODBC, mediante un driver apposito.
In ASP, a livello elementare, è praticamente prassi l'utilizzo dei database di Access, non a caso prodotto sempre da Microsoft.

Per addentrarsi nello studio della connettività verso fonti di dati ODBC non è ora richiesto alcun prerequisito particolare, anche se magari una praticità già acquisita con i database manager e con SQL potranno certamente aiutare nella comprensione dei paragrafi e dei capitoli successivi dedicati all'argomento.
Tutti gli esempi riportati in questa sede si baseranno, per amore dello standard di ASP, sui database di Access.

Sarà dunque necessario disporre di una versione abbastanza recente di questo software (97 o preferibilmente 2000) per procedere.



Primo approccio ad ADO

Come appena detto ADO è il tramite necessario per operare, sia in lettura che in scrittura, su una fonte di dati ODBC.

Il primo oggetto che si incontra analizzando questo componente è Connection, che, come il nome lascia ad intuire, si occupa di fornire la connettività verso un database.

L'oggetto Connection va dichiarato come un qualsiasi ActiveX, mediante la seguente sintassi:

var ADOConn = new ActiveXObject("ADODB.Connection");
Tramite il riferimento ADOConn è ora possibile accedere a metodi e proprietà di tale oggetto.
Prima di procedere oltre, al fine di seguire gli esempi presentati, è necessario ora realizzare un piccolo database Access di prova.

Si vada ad avviare la propria copia di Access, si scelga dall'interfaccia iniziale l'operazione di creazione di un nuovo database vuoto e lo si vada a riporre, con un nome arbitrario, ad esempio prova.mdb, nella cartella che ospiterà i codici ASP analizzati di seguito.

Da Access ora si crei una nuova tabella in visualizzazione struttura ed in essa si vadano ad inserire i seguenti campi:


id, di tipo contatore, da selezionare come chiave primaria mediante click sull'iconcina a forma di chiave (la riga di questo record nella visualizzazione struttura deve essere selezionata mentre si clicca sull'icona)
nome, di tipo testo
cognome, di tipo testo
e_mail, di tipo testo

Chiudendo la finestra di visualizzazione struttura si scelga di salvare tali aggiunte e si assegni un nome alla tabella appena creata, ad esempio nominativi.

Tornando alla schermata precedente sarà ora possibile visualizzare nell'elenco delle tabelle quella appena creata.
Si esegua un doppio click sul suo nome per accedere alla finestra che permetterà di immettere dati all'interno della tabella.

Per testare gli esempi si generino due rige (record) con dati arbitrari e fantasiosi, ad esempio Mario Rossi mrossi@tin.it e Giuseppe Bianchi gbianchi@libero.it.

Come è possibile notare il campo id, che è un contatore nonché la chiave primaria, si incrementa da solo ad ogni inserimento di record, generando una relazione univoca tra l'insieme dei record inseriti e i numeri naturali.

A questo punto si salvi tutto e si chiuda pure Access, il database di esempio è pronto.

Si utilizzi ora in maniera dogmatica il seguente codice, tanto per vedere in pratica sin dall'inizio il risultato cercato:


// Istanzio l'oggetto Connection
var ADOConn = new ActiveXObject("ADODB.Connection");

// Creo la STRINGA DI CONNESSIONE
var strConn = "";
strConn += "driver={Microsoft Access Driver (*.mdb)};";
strConn += "dbq=" + Server.MapPath("prova.mdb");

// Apro la connessione al database selezionato
ADOConn.Open(strConn);

// Interrogo il database
var sql = "SELECT * FROM nominativi";
var ris = ADOConn.Execute(sql);

// Stampo i dati contenuti nel database
while (!ris.EOF) {
Response.Write("Record n° " + ris("id") + "<br>");
Response.Write("Nome: " + ris("nome") + "<br>");
Response.Write("Cognome: " + ris("cognome") + "<br>");
Response.Write("E mail: " + ris("e_mail") + "<br><br>");
ris.MoveNext();
}

// Chiudo la connessione
ADOConn.Close();

Non si meravigli il lettore se l'esempio non dovesse risultare da subito di facile compresione, questo stesso codice servirà ora come appoggio per analizzare nel dettaglio le diverse fasi dell'accesso ad un database.


Metodi e proprietà di Connection

All'interno dell'esempio di poche righe sopra si è fatto ricorso a tre distinti metodi dell'oggetto ADODB.Connection: Open, Execute e Close.

In buona sostanza già questi soli tre metodi, il cui utilizzo però non è immediato, permettono l'accesso ad una fonte di dati ODBC.

Ad essi si aggiungono poi altri elementi di interfaccia meno sfruttati, ma comunque buoni da conoscere.

Per questo è presentata anzitutto una cernita dell'interfaccia base messa a disposizione dall'oggetto Connection.

Si tenga presente che anche in questo caso non sono riportati né tutti i metodi né tutte le proprietà dell'oggetto, ma si è scelto scartando i meno utili nell'apprendimento iniziale dell'argomento.

Qualunque approfondimento può essere svolto documentandosi su http://www.microsoft.com/data/ado/


Metodi

Cancel Annulla l'esecuzione di una chiamata dei metodi Execute e Open in attesa
Close Chiude un oggetto aperto e i relativi oggetti dipendenti
Execute Esegue la particolare istruzione SQL passata al metodo mediante un parametro stringa
Open Apre una connessione a una fonte dati


Proprietà

ConnectionString Contiene le informazioni utilizzate per stabilire una connessione a una fonte dati
ConnectionTimeout Indica in secondi il tempo di attesa da considerare durante il tentativo di stabilire una connessione prima di terminare il tentativo e generare un errore
CursorLocation Imposta o restituisce la posizione del motore del cursore
Version Indica il numero di versione di ADO


Il particolare metodo Open si occupa dell'aprire una connessione verso la fonte di dati specificata in una stringa, detta stringa di connessione, passata al metodo sotto forma di parametro.

Le stringhe di connessione sono basate su una particolare sintassi.

Ogni stringa di connessione è costituita da una serie di coppie chiave-valore, separate tra di loro con un punto e virgola.

Le chiavi sono invece separate dai rispettivi valori mediante il simbolo di uguale.

Nel più tipico dei casi è necessario inserire in tale stringa almeno due coppie, atte ad indicare il formato di database utilizzato e la sua locazione fisica nel file system del server.

Ad esempio:


var strConn = "";
strConn += "driver={Microsoft Access Driver (*.mdb)};";
strConn += "dbq=C:\\Inetpub\\wwwroot\\dati\\database.mdb;";

Di solito il valore associato alla chiave dbq è ricavato mediante l'utilizzo del metodo Server.MapPath, in modo da ottenere automaticamente la conversione di un percorso relativo in un percorso assoluto.

Così è stato fatto nell'esempio precedente.

All'interno della stringa di connessione possono poi essere specificati ulteriori dati, ad esempio un'opzionale password associata al database (senza la quale non sarebbe possibile l'accesso ai dati in esso contenuto), alla seguente maniera:


strConn += "psw=vgh564;";
Una volta stabilita la stringa di connessione è dunque possibile avviare l'accesso alla fonte di dati specificata:

ADOConn.Open(strConn);
Da questo momento in poi sarà possibile dunque operare sul database specificato attraverso i metodi di Connection e degli oggetti ad esso collegati.

Una volta concluse tutte le operazioni preventivate è buona norma chiudere la connessione, utilizzando il metodo Close:

ADOConn.Close();
Il metodo Execute e le Istruzioni SQL

Tipicamente il fulcro del lavoro viene svolto dal metodo Execute, a cui è data la possibilità di eseguire ricerce, effettuare modifiche o cancellare dei record presenti in una tabella.

Tale metodo accetta un parametro di tipo stringa, contenente un'istruzione SQL da eseguire.

In buona sostanza all'interno di questa stringa viene detto esplicitamente al metodo Execute cosa fare.

SQL (Structured Query Language, si dovrebbe pronunciare sequel, ma quasi tutti in Italia dicono esseccuelle) è un linguaggio che rappresenta lo standard per la definizione, l'interrogazione e la modifica dei database.
Per sfruttare la connettività ai database fornita da ADO non occorre essere dei guru di SQL, tuttavia è necessario apprendere la sintassi e l'uso di base di questo linguaggio.

Nonostante un piccolo sforzo iniziale ci si accorgerà presto di quanto la struttura di SQL sia facile da apprendere e persino vicina al linguaggio naturale, e per questo semplice o addirittura piacevole da sfruttare.

Si torni all'ora all'esempio già presentato:


var sql = "SELECT * FROM nominativi";
var ris = ADOConn.Execute(sql);


Si incotra qui per la prima volta nel corso di questa guida un'istruzione SQL.

Le parole chiave utilizzate sono state enfatizzate mediante il grassetto.

Letteralmente "SELECT * FROM nominativi" può essere tradotto in "SELEZIONA ogni campo DALLA TABELLA nominativi".

Il metodo Execute, eseguendo questo comando, restituisce un riferimento ad un oggetto di tipo Recordset.

Come ancora una volta il nome lascia intuire, un oggetto di tipo Recordset rappresenta una collezione di record, estratti dal datadase dal metodo Execute rispettando ciò che è stato domandato dall'istruzione SQL.

In questo caso, infatti, l'oggetto restituito colleziona tutti i campi di tutti i record presenti nella tabella nominativi del database.

Un diverso comando SQL avrebbe ritornato un diverso Recordset, ad esempio eseguendo una selezione basata su qualche particolare regola o ispezione dei campi di ogni singolo record.

Una volta estratti i dati di proprio interesse dal database, tramite l'utilizzo della sintassi di SQL e dell'oggetto Connection, è quindi possibile gestirli attraverso l'interfaccia pubblica dell'oggetto Recordset.

Andando avanti nel corso di questa guida saranno approfonditi gli aspetti relativi sia ad SQL che all'utilizzo dei Recordset.

Per il momento si è voluto esclusivamente avvicinare il lettore all'ideologia che permea l'accesso alle fonti di dati ODBC.

Le applicazioni pratiche e l'approfondimento delle tematiche saranno dunque presentati passo passo da qui in poi.



Approccio agli oggetti Recordset

Il Recordset ricavato dal codice dell'esempio contiene dunque tutti i record che costituiscono la tabella nominativi del database utilizzato.

E' ora possibile muoversi all'interno dei dati acquisiti semplicemente sfruttando i metodi e le proprietà degli oggetti Recordset, qui presentati in maniera non ufficiale.

In particolar modo, per ottenere una stampa a video di tutti i dati ricevuti dalla fonte, è stato messo in atto un ciclo while basato sulla proprietà EOF e sul metodo MoveNext di Recordset.

I Recordset possono essere immaginati come vere e proprie tabelle di dati, dove ogni riga corrisponde ad un record, un po' come nella rappresentazione visuale di Access.

Tale ideologica tabella può essere letta mediante l'utilizzo di un cursore.

Appena l'oggetto Recordset è stato creato il cursore è posizionato all'inizio della prima riga di tale tabella.

In questa situazione i singoli campi del record evidenziato dal cursore sono leggibili tramite l'utilizzo della sintassi


ris("nome_campo")
ed infatti si osservi questa porzione estratta dall'esempio:

Response.Write("Record n° " + ris("id") + "<br>");
Response.Write("Nome: " + ris("nome") + "<br>");
Response.Write("Cognome: " + ris("cognome") + "<br>");
Response.Write("E mail: " + ris("e_mail") + "<br><br>");

Il contenuto dei quattro campi disponibili nella tabella nominativi viene inviato all'output utilizzando proprio la sintassi di accesso ai campi appena mostrata.

Il cursore può inoltre essere spostato in avanti lungo i vari record posseduti mediante il metodo MoveNext().

Una chiamata a tale metodo, insomma, causa l'avanzamento alla riga successiva dell'ideale tabella dei dati ricavati dal database.

Naturalmente il numero di record che costituisce un Recordset è per forza di cose finito, e non sarà possibile spostarsi in avanti su di esso per più di tot volte.

Se si tenta un avanzamento del cursore quando questo ha già scavalcato l'ultimo record della collezione, infatti, viene lanciato un errore e l'esecuzione dell'intero script viene interrotta.

E' qui che torna dunque utile il valore booleano della proprietà EOF dell'oggetto Recordset.

EOF è true solo quando il cursore è posizionato al termine dell'ultima riga disponibile, false altrimenti.

Inglobando dunque gli strumenti acquisiti in un ciclo while diventa possibile il controllo e la scansione del Recordset ricavato, indipendentemente dalla lunghezza di esso.

Il tipo di interfaccia utilizzato da Recordset è piuttosto diffusa in diversi ambienti, Java su tutti, ed è semplice da assimilare proprio per una somiglianza con la naturale maniera di pensare dell'uomo.

La parte conclusiva di questo script, infatti, può essere così tradotta in linguaggio naturale:


fino a quando non raggiungi la fine della tabella dei dati {
stampa i dati presenti nella riga attuale;
avanza di una riga;
}


L'interfaccia di Recordset, comunque, non termina qui e quella esaminata non è che una delle tante pratiche nelle quali è possibile sfruttare un Recordset.

Altre situzioni simili o meno a questa verranno presentate nel corso dei capitoli successivi.



Interagire con i Database

Nel corso del capitolo precedente sono state approcciate le tecniche di accesso ad una fonte di dati ODBC tramite il componente denominato ADO.

Si è perciò notato quale importante ruolo giochi la sintassi SQL anche nelle più basilari operazioni di ricerca.

Come già è stato ribadito la conoscenza di SQL esula dagli scopi di questa guida, tuttavia ci si occupa in questo capitolo dell'analisi delle più elementari e necessarie tipologie di ricerche che è possibile effettuare su un database.

Tutto questo al fine di rendere produttivo lo studio compiuto sinora relativamente all'accesso alle fonti ODBC.

Si riprenda allora l'esempio più recente riportato dalla guida rispetto ad SQL:


SELECT * FROM nominativi
Si tratta con tutta probabilità dell'esempio di più semplice formulazione possibile.
Traducendo in maniera letterale in italiano l'istruzione suonerebbe come:
SELEZIONA tutti i campi DALLA TABELLA nominativi
La prima cosa che si nota, perciò, è come siano determinanti in una ricerca le due istruzioni SELECT e FROM, ambedue seguite da un parametro.
La prima indica quali campi dei record estratti debbano essere restituiti.

Il particolare simbolo * sta ad indicare la restituzione di tutti i campi appartenenti ai singoli record.

La clausula FROM, invece, è necessaria per determinare da dove estrarre tali record, e per questo viene fatta seguire dal nome della tabella che si intende considerare.

Come già è stato visto questo tipo di ricerca restituisce un oggetto Recordset rappresentante tutti i record, comprensivi di tutti i campi, appartenenti alla tabella nominativi.

Di certo non si tratta di una ricerca troppo utile.
Lo scopo di una ricerca, infatti, è spesso quello di utilizzare un certo criterio per restringere il campo dei risultati.

Supponiamo allora di voler estrarre dalla tabella nominativi un solo record, ossia quello con id pari a 3.

Ecco come fare:


SELECT * FROM nominativi WHERE id = 3
In linguaggio naturale, oramai dovrebbe essere facile capirlo, l'istruzione si formula come:
SELEZIONA tutti i campi DALLA TABELLA nominativi DOVE il campo id è pari a 3
E se non dovesse essere presente un record che soddisfi tale condizione?
Semplicemente il valore della proprietà EOF dell'oggetto Recordset ricavato sarà true da subito.

Da questo punto di vista la sintassi per eseguire ricerche risulta piuttosto di facile intuizione.

Se si fosse voluto ricercare quei record con id maggiore a 3 sarebbe bastato scrivere:


SELECT * FROM nominativi WHERE id > 3
Si tralascia la trasposizione in linguaggio naturale.

E' anche possibile utilizzare degli operatori per specificare delle condizioni più complesse.

Ad esempio ecco come si ottengono i record con id compreso tra 3 e 15, estremi esclusi:


SELECT * FROM nominativi WHERE id > 3 AND id < 15
L'uso di tali operatori è ancora una volta intuitivo, e del tutto analogo alle espressioni booleane di JScript.

Gli operatori principalmente usati per combinare più espressioni sono ovviamente AND e OR.

Fino ad ora ci si è limitati a specificare condizioni di ricerca sul campo id, ossia un contatore, un campo numerico.

Le ricerche più interessanti avvengono però sui campi contenenti del testo, come nome o cognome nell'esempio del capitolo precedente.
Come delimitatore di stringhe SQL usa, in maniera analoga al Pascal, il singolo apice '.

Se si volessero allora estrarre dalla tabella nominativi quei record corrispondenti a tutti le persone aventi nome Carlo la giusta istruzione sarebbe:


SELECT * FROM nominativi WHERE nome = 'Carlo'
Anche qui naturalmente si può ricorrere agli operatori AND ed OR per la costruzione di query più complesse.

Le ricerche su campi di testo, comunque, presentano problematiche molto più estese rispetto alle più banali ricerche su campi numerici.

Una questione piuttosto importante, ad esempio, riguarda le ricerche case-insensitive, ossia quelle ricerce eseguite su campi di testo senza considerare le differenze che corrono tra lettere minuscole e lettere maiuscole.

Secondo l'esempio precedente, infatti, è possibile ottenere tutti i record con campo nome pari esattamente a 'Carlo'.

Se nella tabella dovesse presentarsi un record con campo nome pari a 'carlo' questo non verrebbe restituito.

Con l'operatore =, infatti, è possibile eseguire ricerche solo ed esclusivamente case-sensitive.

SQL fornisce perciò un altro operatore di confronto utile per lo scopo: l'operatore LIKE.

Si consideri la seguente riga:


SELECT * FROM nominativi WHERE nome LIKE 'carlo'
Questo comando restituirebbe tutti i record con campo nome pari a 'Carlo', 'carlo', e anche volendo 'cArlo' o 'CARLO' e così via.
I "prodigi" di SQL, comunque, non si fermano qui.

Grazie ad una serie di caratteri speciali, infatti, è anche possibile esprimere in maniera semplice delle ricerche su campi testuali molto più complesse.

Potrebbe infatti essere necessario fare delle ricerche su campi che devono contenere una certa parola, e non per forza equivalere ad essa.

Si supponga che nella tabella nominativi sia presente anche una persona chiamata Giancarlo, e si supponga di voler ottenere con una semplice ricerca anche questo record.



SELECT * FROM nominativi WHERE nome LIKE '%carlo'
Il particolare carattere %, quindi, rappresenta una qualsiasi combinazione di caratteri.

Nel caso specifico, quindi, vengono restituiti tutti quei record di cui il campo nome termini con la sequenza di lettere 'carlo', e quindi anche 'Giancarlo'.
Il simbolo % può essere utilizzato perciò in svariati modi.

Si potrebbe pensare di farsi restituire tutti quei record con il campo nome che cominci per 'carlo'.



SELECT * FROM nominativi WHERE nome LIKE 'carlo%'
Se dovesse esistere un record con campo nome pari a 'Carlo Ambrogio' verrebbe in questo caso incluso tra i risultati restituiti dalla query.
Una ricerca molto interessante è la seguente:


SELECT * FROM nominativi WHERE nome LIKE '%carlo%'
Tradotta in linguaggio naturale verrebbe:
SELEZIONA tutti i campi DALLA TABELLA nominativi DOVE il campo nome CONTIENE la parola 'carlo'
Con questa ricerca verrebbero perciò restituiti tutti i Carlo, ma anche tutti gli eventuali composti del nome, tra cui Giancarlo e Carlo Ambrogio degli esempi precedenti.

SQL permette inoltre di mettere in ordine i risultati restituiti in base ad un particolare criterio, grazie alla clausula SORT BY.

Si immagini di voler ordinare la ricerca appena esaminata secondo l'ordine alfabetico dei cognomi.
La cosa è semplice:


SELECT * FROM nominativi WHERE nome LIKE '%carlo%' ORDER BY cognome
In questo caso l'oggetto Recordset restituito può essere sfogliato in maniera ordinata.

Nel caso fossero presenti solo due record in grado di soddisfare la ricerca, ad esempio corrispondenti a Carlo Aquilini e a Carlo Rossi, si otterrebbe che il primo record restituito sarà certamente quello di Carlo Aquilini, indipendentemente dall'ordine di inserimento nel database.

SQL permette anche l'ordinamento in senso inverso:


SELECT * FROM nominativi WHERE nome LIKE '%carlo%' ORDER BY cognome DESC Nel caso di un ordinamento svolto in base ad un campo testuale questo verrà eseguito sul normale ordine alfabetico, nel caso di campi numerici avverrà in base alla normale successione dei numeri.

Molto interessante e sfruttato anche l'ordinamento svolto in base ai campi data/ora.



Aggiornamento dei record

Formulare delle query per eseguire delle ricerche e delle estrazioni ragionate da una fonte di dati non è l'unica cosa resa possibile da SQL.

Sempre mediante il metodo Execute dell'oggetto Connection di ADO, e sempre attraverso un comando SQL passato a tale metodo sotto forme di normale stringa di JScript, è anche possibile aggiornare il contenuto di una tabella e dei suoi record.

Anche in questo caso si partirà da un esempio concreto.

Supponiamo di aver indicizzato all'interno della tabella nominativi il seguente record:


id = non ci interessa saperlo
nome = Carlo
cognome = Rossi
e_mail = crossi@tin.it


Come ci si dovrebbe comportare un domani se Carlo Rossi ci comunicasse di aver cambiato indirizzo e mail?
La risposta è semplice, ed è contenuta tutta nel seguente comando.

Nel caso la nuova casella e mail da registrare fosse carlo@rossi.it basterebbe formulare quanto segue:


UPDATE nominativi SET e_mail = 'carlo@rossi.it' WHERE nome = 'Carlo' AND cognome = 'Rossi'
In linguaggio naturale:

AGGIORNA la tabella nominativi PONENDO e_mail uguale a 'carlo@rossi.it' IN QUEI RECORD DOVE il nome è 'Carlo' E il cognome è 'Rossi'
Si fa qui la conoscenza di due nuove istruzioni SQL: UPDATE e SET, che vengono usate in maniera concomitante.
La prima specifica quale tabella verrà coinvolta dall'aggiornamento specificato dalla seconda.

La clausula WHERE rimane del tutto identica all'utilizzo che se ne è fatto precedentemente.

Questa volta però i record inquadrati dalla ricerca verranno aggiornati secondo quanto specificato da SET, anziché essere semplicemente restituiti.

E possibile aggiornare in un colpo solo anche più di un campo, utilizzando la virgola come separatore.

Nel caso si fosse inserito nel database di esempio anche un campo contenente l'url della home page degli utenti registrati sarebbe ora possibile aggiornare anche questo dato:


UPDATE nominativi SET e_mail = 'carlo@rossi.it', home_page = 'http://www.rossi.it' WHERE nome = 'Carlo' AND cognome = 'Rossi'
Inserimento di un nuovo record

Un po' più laboriosa risulta invece la creazione di un nuovo record da aggiungere ad una tabella esistente.

Invece di ricorrere alla sola sintassi SQL e alla sua esecuzione tramite Connection.Execute conviene sfruttare l'interfaccia messa a disposizione dall'oggetto Recordset, sempre appartenente alla famiglia di ADO.

Si supponga di dover realizzare una pagina che consenta ad un utente di inserire il proprio nominativo all'interno del database in questione.

Per prima cosa è meglio disporre una semplice pagina HTML necessaria per l'invio dei dati, tramite un form:


<html>
<head><title>Inserisci il tuo nome!</title></head>
<body>
<form action="inserisci.asp" method="post">
Nome:<br>
<input type="text" name="nome"><br>
Cognome:<br>
<input type="text" name="cognome"><br>
E mail:<br>
<input type="text" name="e_mail"><br><br>
<input type="submit" value="Inserisci">
</form>
</body>
</html>

Come è possibile vedere dal codice i dati inseriti vengono passati alla pagina inserisci.asp,
il cui codice è il seguente:

// Ricevo i dati dal form
var nome = Request.Form("nome");
var cognome = Request.Form("cognome");
var e_mail = Request.Form("e_mail");

// Istanzio l'oggetto Connection
var ADOConn = new ActiveXObject("ADODB.Connection");

// Creo la STRINGA DI CONNESSIONE
var strConn = "";
strConn += "driver={Microsoft Access Driver (*.mdb)};";
strConn += "dbq=" + Server.MapPath("prova.mdb");

// Apro la connessione al database selezionato
ADOConn.Open(strConn);

// Istanzio Recordset
var RecSet = new ActiveXObject("ADODB.Recordset");

// Collego Recordset alla connessione aperta
RecSet.Open("nominativi",ADOConn,3,3);

// Formulo il nuovo record
RecSet.AddNew();
RecSet("nome") = nome;
RecSet("cognome") = cognome;
RecSet("e_mail") = e_mail;

// Aggiorno la tabella
RecSet.Update();

// Chiudo Recordset
RecSet.Close();

// Chiudo la connessione
ADOConn.Close();

Corpo HTML :
<html>
<head><title>Inserimento effettuato</title></head>
<body>
Inserimento effettuato!
</body>
</html>

Si focalizzi ora la propria attenzione sulle seguenti righe estratte dal codice:

RecSet = new ActiveXObject("ADODB.Recordset");
RecSet.Open("nominativi",ADOConn,3,3);
RecSet.AddNew();
RecSet("nome") = nome;
RecSet("cognome") = cognome;
RecSet("e_mail") = e_mail;
RecSet.Update();
RecSet.Close();

E' tramite questa serie di operazioni che l'inserimento di un nuovo record nella tabella nominativi è reso possibile.

Una volta istanziato l'oggetto Recordset viene avviata una connessione alla tabella nominativi della fonte di dati giù puntata da ADOConn.

Il metodo AddNew() inserisce un nuovo record, inizialmente vuoto, all'interno del Recordset.

E' sufficiente quindi riempire uno ad uno i singoli campi del record, ad esclusione del contatore chiave primaria id, che viene incrementato automaticamente.

Una volta riempiti i singoli campi è sufficiente lanciare il metodo Update() per far sì che l'aggiunta si rifletta sulla fonte di dati specificata.

A questo punto la connessione può concludersi, in quanto l'operazione desiderata è stata portata a termine.



Conclusioni

Come già ribadito più volte non si può credere che la comprensione di questi paragrafi esaurisca la conoscenza di SQL.

L'argomento è anzi così vasto da fornire sufficienti spunti per la realizzazione di intere guide dedicate, alcune delle quali tranquillamente reperibili in rete.

Quello che si è visto tra queste righe è solo la base necessaria ed indispensabile per poter comprendere gli esempi futuri e per poter maneggiare con un minimo di indipendenza le proprie applicazioni basate sull'accesso ODBC.

I prossimi capitoli chiariranno in tal senso quanto descritto sinora, attraverso tutorial e pratici esempi.



Ricordatevi Sempre di mettere i TAG di apertura e chiusura dell' ASP quando includete codice nelle pagine Html.

ESEMPIO: <% codice asp %>.

Ritorna


 NEWS 
12/09/2007 13:08:14
PAURA
Marco Travaglio con Gomez e Crozza ed Elio

11/09/2007 14:44:48
IL V-DAY: un evento NUOVO !!!!!
Aria fresca in Parlamento articolo del Sole24ore: http://www.ilsole24ore.com/art/SoleOnLine4/At...


28/06/2007 14:20:55
LEOPARDI SALUTI i 500
Certo ragazzi, anche noi nel nostro piccolo cresciamo, e Leopardi è il cinquecentesimo saggio nella ...


12/04/2007 11:31:15
ATTENZIONE A CheckMessenger.NET! , è una TRUFFA
Ennesito sito truffaldino: si chiama CheckMessenger e vi promette di mostrarvi se i vostri contatti ...


26/01/2007 11:58:34
AGGIORNATE TUTTE LE SEZIONI
AGGIORNATE TUTTE LE SEZIONI Sì, cari amici. Ho provveduto ad aggiornare le principali sazioni de...


:: ELENCO NEWS ::

  
Valid XHTML 1.0! Valid CSS!