Un Guestbook in ASP.NET, Access e ADO

Siti dinamici con ASP.NET
Impara a creare siti ed applicazioni Web con Microsoft .NET

Scritto da Luca Ruggiero nella sezione Asp.NET

Concesso in esclusiva a MrWebmaster.it - E' vietata la pubblicazione senza espresso consenso del proprietario

Introduzione

Un Guestbook, detto anche libro degli ospiti, è un sistema utilizzato da siti, per lo più amatoriali, per farsi lasciare online un messaggio o un commento dai propri visitatori. Tradotto in termini tecnici, si tratta di un'applicazione input-output che scrive-legge su e da un database o da un altra struttura stabile per la conservazione dei dati.

In questo Articolo vedremo come implementare questo meccanismo utilizzando la tecnologia ASP.NET, basandoci su ADO tradizionale per leggere e scrivere su un database Access.

Struttura del database

Creiamo il file database.mdb all'interno del quale creiamo la tabella guestbook che conterrà i campi id Contatore, nome Testo, email Testo, messaggio Memo e data Testo. Si posizioni il database nella cartella guestbook sul server Web che utilizzeremo come esempio.

Al fine di utilizzare ADO tradizionale, è necessario copiare nella root di IIS (o del server Web che state utilizzando) nella cartella bin il file adodb.dll (effettuare una ricerca sul sistema per localizzarlo).

Il file guestbook.aspx

Utilizzeremo il solo file guestbook.aspx sia per leggere che per scrivere, sfruttando la sub-routine di default Page_Load() che leggerà i dati al caricamento della pagina, e la sub-routine Firma per scrivere sul database. Di seguito il codice completo corredato di commenti:

<%@ Page Language="VB" ValidateRequest="false" %>

<!-- IMPORTO I NAMESPACE CHE MI SERVONO -->
<%@ Assembly Name="ADODB" %>
<%@ Import   Namespace="ADODB" %>
<%@ Import   Namespace="System.Data" %>
<%@ Import   Namespace="System.Text.RegularExpressions" %>

<script runat="server">
    ' CREO GLI OGGETTI CONNECTION E RECORDSET
    Private cn As New ADODB.Connection
    Private rs As New ADODB.Recordset

    ' CARICAMENTO DI PAGINA
    Private Sub Page_Load(sender As Object, e As EventArgs)
        ' APRO LA CONNESSIONE
        cn.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" _
        & Server.MapPath("database.mdb"))
        ' APRO IL RECORDSET E LANCIO LA QUERY DI LETTURA DEL MESSAGGI
        rs.Open("SELECT * FROM guestbook ORDER BY id DESC", cn, 1)
        ' CONTROLLO CHE CI SIANO MESSAGGI...
        If rs.EOF Then
            Messaggi.Text = "Nessun messaggio presente"
        Else
            ' LEGGO TUTTI I MESSAGGI FORMATTANDOLI CON CODICE HTML
            Messaggi.Text = ""
            While rs.EOF = False
                With Messaggi
                    .Text += "<div class='TITOLO'><b>"
                    .Text += "Messaggio di "
                    .Text += "<a href='mailto:" & rs("email").Value & "'>"
                    .Text += Server.HTMLEncode(rs("nome").Value)
                    .Text += "</a></b> "
                    .Text += "(<i>" & rs("data").Value & "</i>)"
                    .Text += "</div>"
                    .Text += "<div class='MSG'>"
                    .Text += rs("messaggio").Value
                    .Text += "</div><br>"
                End With
                rs.MoveNext()
            End While
        End If
        rs.Close()
        cn.Close()
    End Sub

    ' FIRMA DEL GUESTBOOK
    Private Sub Firma(sender As Object, e As EventArgs)
        ' ESPRESSIONE REGOLARE PER CONTROLLARE IL CAMPI EMAIL
        Dim re As New Regex("(?<user>[^@]+)@(?<host>.+)")
        ' RECUPERO I DATI DAL MODULO
        Dim nome As String = Replace(txtNome.Text, "'", "''")
        Dim email As String = txtEmail.Text
        Dim messaggio As String
        messaggio = Replace( _
                    Replace( _
                    Replace( _
                    txtMessaggio.Text, "<", "<"), vbCrLf, "<br>"), "'", "''")
        ' CONTROLLO IL CAMPO NOME
        If Len(Trim(nome)) = 0 Then
            Messaggi.Text = "Inserisci il tuo nome"
            Exit Sub
        End If
        ' CONTROLLO IL CAMPO EMAIL
        If re.IsMatch(email) = False Then
            Messaggi.Text = "Inserisci il tuo indirizzo email"
            Exit Sub
        End If
        ' CONTROLLO IL CAMPO MESSAGGIO
        If Len(Trim(messaggio)) = 0 Then
            Messaggi.Text = "Inserisci il messaggio"
            Exit Sub
        End If
        ' SCRIVO LA DATA
        Dim data As String = FormatDateTime(Now(), 1)
        ' FORMATTO LA STRINGA SQL
        Dim SQL As String = ""
            SQL += "INSERT INTO guestbook "
            SQL += "(nome, email, messaggio, data) "
            SQL += "VALUES "
            SQL += "('" & nome & "', "
            SQL += "'" & email & "', "
            SQL += "'" & messaggio & "', "
            SQL += "'" & data & "')"
        ' EFFETTUO L'INSERIMENTO DEL NUOVO RECORD
        cn.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" _
        & Server.MapPath("database.mdb"))
        cn.Execute(SQL)
        cn.Close()
        Response.Redirect("guestbook.aspx")
    End Sub
</script>
<html>
    <head>
        <title>Un Guestbook in ASP.NET, Access e ADO</title>
        <style type="text/css">
            /* UN PO DI STILE NON GUASTA :-) */
            td
            {
                font: Normal 12px Verdana;
            }
            div.TITOLO
            {
                background-color: #EEEEEE;
                padding: 5px;
                border-bottom: Solid 1px #CCCCCC;
            }
            div.MSG
            {
                padding: 5px;
                border-bottom: Solid 1px #CCCCCC;
            }
            a
            {
                color: #0000FF;
                text-decoration: None;
            }
            a:hover
            {
                color: #FF0000;
                text-decoration: Underline;
            }
        </style>
    </head>
<body>

<h1 align="center">GUESTBOOK</h1>

<form id="Modulo" runat="server">
    <table width="500" align="center">
        <tr>
            <td width="150">Nome</td>
            <td width="350">
                <asp:TextBox
                    id="txtNome"
                    runat="server"
                    MaxLength="50"
                    Width="100%" />
            </td>
        </tr>
        <tr>
            <td>Email</td>
            <td>
                <asp:TextBox
                    id="txtEmail"
                    runat="server"
                    MaxLength="50"
                    Width="100%" />
            </td>
        </tr>
        <tr>
            <td colspan="2">Messaggio</td>
        </tr>
        <tr>
            <td colspan="2">
                <asp:TextBox
                    id="txtMessaggio"
                    runat="server"
                    TextMode="Multiline"
                    Width="100%"
                    Height="150px" />
            </td>
        </tr>
        <tr>
            <td colspan="2" align="right">
                <asp:Button
                    runat="server"
                    Text="Firma"
                    OnClick="Firma" />
            </td>
        </tr>
    </table>
    <br>
    <table width="500" align="center">
        <tr>
            <td><asp:Label id="Messaggi" runat="server" /></td>
        </tr>
    </table>
</form>

</body>
</html>

I più cliccati della sezione Asp.NET

:: Guida base ad Asp.NET (57.290)

:: I Validation Controls di Asp.NET (29.532)

:: Utilizzo delle QueryString con Asp.NET e C Sharp (23.719)

:: Visualizzare i record di un database Access con Asp.NET (21.262)

:: Inviare email con Asp.NET: il Namespace System.Web.Mail (18.166)

:: Gestione delle News in ASP.NET (13.467)

:: Una Newsletter in ASP.NET (12.100)

:: Inserire dati in un database Access con Asp.NET (11.855)

:: Upload di file in Asp.NET e Javascript (11.531)

:: Risolvere un indirizzo IP ed individuare nome macchina e dominio in Asp.NET (10.107)

IN EVIDENZA
DOWNLOAD