Interfacciare DB con ADO e ASP

Transcript

Interfacciare DB con ADO e ASP
Corsi di Laurea Specialistica in Ingegneria
Informatica/Gestionale
Sistemi Informativi per il Web
Active Server Pages ed ADO
A.A. 2005 – 2006
Scrivere ASP
• Le pagine ASP possono contenere codice HTML o XML
• Le parti del documento che racchiudono codice script vanno
racchiuse tra i delimitatori <% e %>
• Gli script vengono eseguiti sul lato server
• E’ possibile usare sia vbscript che javascript (in questo caso
aggiungere in testa al documento: <%@
language="javascript"%> )
• per default il server assume script in vbscript
Come usare le ASP
•
•
•
•
•
Un ASP engine è in tutti i Microsoft IIS
Il PWS (sul cd di win95) le supporta
Alternative:
Abyss http://www.aprelium.com/
SUN http://www.sun.com/software/chilisoft/
La mia prima ASP
<html>
<head><title>la mia prima asp</title></head>
<body>
<% response.write("Hello World!") %>
</body>
</html>
• Il metodo di scrittura e’ response.write
Elementi della sintassi
• Dichiarazione di variabili e loro uso:
<%dim name
name=“Bond"
response.write("My name is: " & name)
%>
• Array:
<%
Dim cognome(5)
cognome(0) = “bond"
cognome(1) = “kravitz"
cognome(2) = "Hegel"
cognome(3) = "Stalin"
cognome(4) = “Kim Jong Il"
cognome(5) = "Borges"
For i = 0 to 5
response.write(cognome(i) & "<br />")
Next
%>
esempio
<%
dim h
h=hour(now())
response.write("<p>" & now())
response.write(" (Ora locale server) </p>")
If h<12 then
response.write("Good Morning!")
else
response.write("Good evening!")
end if
%>
Durata delle variabili
• Variabili in un file ASP sono accessibili all’interno dell’intero file.
• Le variabili dichiarate all’interno di procedure sono visibili solo
all’interno delle stesse.
• Variabili che debbano essere accessibili da file diversi devono essere
variabili di session (sessione di un unico utente) oppure di
application (visibili a tutti gli utenti) .
Usare le procedure
<html>
<head>
<%
sub vbproc(num1,num2)
response.write(num1*num2)
end sub
%>
</head>
<body>
<p>
Risultato: <%call vbproc(3,4)%>
</p>
<p>
Risultato: <%vbproc 3,4%>
</p>
</body>
</html>
Interagire con le ASP: usare le
form
<html>
<body>
<form action="demo.asp" method="post">
Your name: <input type="text" name="fname" size="20">
<input type="submit" value="Submit">
</form>
<%
dim fname
fname=Request.Form("fname")
If fname<>"" Then
Response.Write("Hello " & fname & "!<br />")
Response.Write("How are you today?")
End If
%>
</body>
</html>
•
E’ anche possibile usare il metodo GET, ma e’ sconsigliato
Passare parametri ad una ASP
mediante form
<html>
<body>
<form method="post" action="welcome.asp">
First Name: <input type="text" name="fname" value="">
Last Name: <input type="text" name="lname" value="">
<input type="submit" value="Submit">
</form>
</body>
</html>
Passare parametri ad una ASP mediante
form: welcome.asp
<html>
<body>
<% nome=Request.form("fname")
cognome=Request.form("lname")
response.write("<p>Hello " & nome & " " & cognome &
"!</p>") response.write("<grazie di esistere!</p>") %>
</body>
</html>
Active Data Objects
• E’ una tecnologia Microsoft
• E’ un componente Active-X
• E’ concepita per accedere in maniera semplice a
database via web
• E’ presente in IIS
• Usa ed estende l’accesso via ODBC
Attivazione di una origine dati
•
•
•
•
•
•
•
•
•
•
ODBC
Esempio usando MSAccess:
Selezionare Pannello di Controllo
Cliccare su Origine dati ODBC
Selezionare la scheda DSN (Data Source Name) di sistema ovvero DSN
Utente
Cliccare su aggiungi
Selezionare il driver (Microsoft Access)
Inserire nella scheda il nome di riferimento dell'origine dati
Cliccare su Database: Seleziona
Selezionarere Database
Premere OK
Connettersi ad un database
• Varie modalità:
Diretta:
<% set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0" conn.Open
"c:/webdata/northwind.mdb" %>
Via ODBC:
<% set conn=Server.CreateObject("ADODB.Connection")
conn.Open "northwind" %>
Recuperare dati da un DB
• Creare un recordset:
<%
Set rs=Server.CreateObject("ADODB.recordset")
rs.Open "Select * from Customers", conn %>
Visualizzare i dati estratti:
<%
for each x in rs.fields
response.write(x.name)
response.write(" = ") response.write(x.value)
next
%>
Un esempio:
<html><body>
<%
set conn=Server.CreateObject("ADODB.Connection")
conn.Open "northwind"
set rs = Server.CreateObject("ADODB.recordset")
sql="SELECT Companyname, Contactname FROM Customers"
rs.Open sql, conn
%>
<table border="1" width="100%">
<tr>
<%for each x in rs.Fields
response.write("<th>" & x.name & "</th>")
next%>
</tr>
<%do until rs.EOF%>
<tr>
<%for each x in rs.Fields%>
<td><%Response.Write(x.value)%></td>
<%next
rs.MoveNext%>
</tr>
<%loop
rs.close
conn.close
%>
</table></body></html>
Aggiungere un record: input
file
<html> <body>
<form method="post" action="demo_add.asp">
<table>
<tr> <td>CustomerID:</td>
<td><input name="custid"></td> </tr>
<tr> <td>Company Name:</td>
<td><input name="compname"></td> </tr>
<tr> <td>Contact Name:</td> <td>
<input name="contname"></td> </tr>
<tr> <td>Address:</td> <td>
<input name="address"></td> </tr>
</table>
<input type="submit" value="Add New">
</form>
</body> </html>
Aggiungere un record: asp
<html> <body>
<% set conn=Server.CreateObject("ADODB.Connection")
conn.Open "northwind"
sql="INSERT INTO customers (customerID,companyname,"
sql=sql & "contactname,address)"
sql=sql & " VALUES "
sql=sql & "('" & Request.Form("custid") & "',"
sql=sql & "'" & Request.Form("compname") & "',"
sql=sql & "'" & Request.Form("contname") & "',"
sql=sql & "'" & Request.Form("address") & "')“
conn.Execute sql,recaffected
Response.Write("<h3>" & recaffected & " record added</h3>")
conn.close %>
</body> </html>
Interrogare un db con dei
valori
<html> <body>
<form method="post" action="demo_query.asp">
<table>
<tr> <td>CustomerID:</td>
<td><input name="custid"></td> </tr>
<tr> <td>Company Name:</td>
<td><input name="compname"></td> </tr>
</table>
<input type="submit" value=“Find data">
</form>
</body> </html>
demo_query.asp:
<html> <body>
<% set conn=Server.CreateObject("ADODB.Connection")
conn.Open "northwind"
set rs = Server.CreateObject("ADODB.recordset")
sql=“SELECT * FROM customers WHERE custid = & Request.Form("custid") & " AND “
Sql=sql & “compname =“ & Request.Form("compname") & ""
rs.Open sql, conn %>
<table border="1" width="100%"><tr>
<%for each x in rs.Fields
response.write("<th>" & x.name & "</th>")
next%> </tr>
<%do until rs.EOF%>
<tr> <%for each x in rs.Fields%>
<td><%Response.Write(x.value)%></td>
<%next
rs.MoveNext%> </tr>
<%loop
rs.close
conn.close %>
</table>
</body></html>
Aggiornare e cancellare
sql="UPDATE customers SET "
sql=sql & "companyname='" & Request.Form("companyname") & "',"
sql=sql & "contactname='" & Request.Form("contactname") & "',"
sql=sql & "address='" & Request.Form("address") & "',"
sql=sql & "city='" & Request.Form("city") & "',"
sql=sql & "postalcode='" & Request.Form("postalcode") & "',"
sql=sql & "country='" & Request.Form("country") & "'"
sql=sql & " WHERE customerID='" & cid & "'"
conn.Execute sql, ra
sql="DELETE FROM customers"
sql=sql & " WHERE customersID='" & cid & "'"
conn.Execute sql, ra
Caricare direttamente I record:
rs.Open "Select * from Customers", conn
p=rs.GetRows(i,j) ‘i quanti record copiare, j a partire da quale record
response.write(p(i,j)) ‘i num. colonna, j num record
Individuare gli errori
<%for each Err in Conn.Errors
response.write("<p>")
response.write("Description: ")
response.write(Err.Description & "<br />")
response.write("Help context: ")
response.write(Err.HelpContext & "<br />")
response.write("Help file: ")
response.write(Err.HelpFile & "<br />")
response.write("Native error: ")
response.write(Err.NativeError & "<br />")
response.write("Error number: ")
response.write(Err.Number & "<br />")
response.write("Error source: ")
response.write(Err.Source & "<br />")
response.write("SQL state: ")
response.write(Err.SQLState & "<br />")
response.write("</p>")
next%>
Usare i cookie con le ASP
<%
dim visite
response.cookies("visite").Expires=date+365
visite=request.cookies("visite")
%>
<html><body>
<%
if visite="" then
response.cookies("visite")=1%>
Welcome! This is the first time you are visiting this Web page.
<%
else
response.cookies("visite")=visite+1
response.write("You have visited this ")
response.write("Web page " & visite)
if visite=1 then
response.write " time before! Thanks for coming back"
else
response.write " times before! Thanks for coming back "
end if
end if
%>
</body></html>
Cookie con valori multipli
<% Response.Cookies("firstname")=“Eugenio"
Response.Cookies("user")(“nome")=“Antonio"
Response.Cookies("user")(“interessi")=“piscina" %>
<html><body><%
dim x,y
for each x in Request.Cookies
response.write("<p>")
if Request.Cookies(x).HasKeys then
for each y in Request.Cookies(x)
response.write(x & ":" & y & "=" & Request.Cookies(x)(y))
response.write("<br />")
next
else
Response.Write(x & "=" & Request.Cookies(x) & "<br />")
end if
response.write "</p>"
next
%>
</body></html>
Variabili di sessione
• Mantengono dati relativi ad un utente durante una sessione di
lavoro
• Un oggetto Session viene instanziato sul server all’inizio di una
sessione utente e distrutto alla fine della stessa
• Una sessione inizia quando:
– un utente richiede una pagina asp e nel file denominato
Global.asa è presente una procedura Session_OnStart
– Un valore viene immagazzinato in una variabile session
• Una sessione termina:
Per default dopo 20 minuti
Imponendo un timeout <% Session.Timeout=5 %>
Imponendo l’abbandono immediato <% Session.Abandon %>
Usare variabili di sessione
• Per inserirle:
<% Session("username")=“Antonio" Session("age")=27 %>
• Per recuperarle:
Welcome <%Response.Write(Session("username"))%>
• Per rimuoverle:
<% If Session.Contents("age")<18
then Session.Contents.Remove(“buy")
End If %>
Usare variabili di application
• Una application è un set di file asp, tipicamente concepiti
per essere usati insieme in sequenza.
• Una application consente di legare le variabili dei vari file
insieme.
• La visibilità delle variabili è per tutti gli utenti della
applicazione.
• Ciascuna variabile può esere bloccata e sbloccata
Usare variabili di application
• Nel file Global.asa scrivere qualcosa tipo:
<script language="vbscript" runat="server">
Sub Application_OnStart
application("vartime")=""
application("users")=1
End Sub
</script>
• Per accedere:
<% Response.Write(Application("users")) %>
• Per bloccare/sbloccare
<% Application.Lock
‘aggiungere il codice qui
Application.Unlock %>
Il file Global.asa
•
Può contenere dichiarazioni di oggetti, metodi e variabili accessibili da tutti i
file nella applicazione
• Deve trovarsi nella root della pplicazione; ci può essere 1 solo file di questo
tipo nella applicazione
• Un generico file:
<script language="vbscript" runat="server">
sub Application_OnStart
''''some code
end sub
sub Application_OnEnd
''''some code
end sub
sub Session_OnStart
''''some code
end sub
sub Session_OnEnd
''''some code
end sub
</script>
Esempi:
Inizializzare un contatore di sessione:
<script language="vbscript" runat="server">
sub Session_OnStart Session("started")=now()
end sub
</script>
Aprire un nuovo documento:
<script language="vbscript" runat="server">
sub Session_OnStart Response.Redirect("newpage.asp")
end sub
</script>
Esempi:
<script language="vbscript" runat="server">
Sub Application_OnStart
Application("visitors")=0
End Sub
Sub Session_OnStart
Application.Lock Application("visitors")=Application("visitors")+1
Application.UnLock
End Sub
Sub Session_OnEnd
Application.Lock Application("visitors")=Application("visitors")-1
Application.UnLock
End Sub
</script>
Per mostrare i visitatori al momento:
<%response.write(Application("visitors"))%>