Dag 10 opgave 3b

Opgavens ordlyd er:
"Opgave 3 Gæstebog
Lav en WebApplikation som simulerer en gæstebog.
Brugeren skal kunne indtaste navn, email og en besked (på flere linier). Der skal være 2 knapper: en knap til at nulstille felterne med navn, email og besked (Reset-knap), og en knap til at sende den indtastede information (Submit-knap).
I første omgang skal den indtastede information blot vises i nogle labels nederst på siden, når der trykkes på Submit-knappen.

I anden omgang skal det indtastede gemmes i en passende tabel i en database med de tre felter (og eventuelt en dato, hvis du synes det). Tabellen skal også have et key-felt (kaldet f.eks. Id). Tabellen skal vises i et GridView nederst på siden. Når der trykkes på Submit-knappen skal informationen i de tre felter tilføjes til tabellen, og datagriddet skal opdateres, så det viser det nye indhold af tabellen. "


Koden er at finde nederst på denne side

Gå direkte til koden opgave 3 Greetings.aspx
Her kan du også downloade koden som .zip-fil.


Gennemgang af opgaveløsningen:

Jeg brugte meget af tiden i går på databasen. Problemet var id-feltet som jeg havde sat til autonumber i ms access, men ved indsættelse fra webapplikationen skulle jeg have id'et med. I skrivende stund kommer jeg i tanke om, at min hovedopgavemakker og jeg havde samme problemstilling ved hovedopgaven, og derfor lavede fiks-fakserier med kald til databasen for at få det seneste id-nummer og så via kode danne det nye nummer - derved var der ikke meget udnyttelse af autoincrement ved det id!

Afbræk fra drilske problemstillinger er altid godt, og jeg kom i tanke om, at jeg allerede havde et datofelt i databasen, så hvis jeg i stedet udvidede den til også at omfatte klokkeslettet, så kunne jeg bruge dato+klokkeslet som primary key.
Så tænkt, følgeligt gjort.
Jeg afviger derfor lidt fra opgaven, men der er påskeferie og jeg venter til næste undervisningsgang med at høre underviseren om jeg kunne have udnyttet autonumber på anden vis.

Access tillader maks 255 anslag som data pr. felt. Dermed sætter det en begrænsning på hvormeget brugeren må skrive i beskeden.
Jeg startede med at lave en customvalidate, men fik overbevist mig selv om, at jeg kunne validere det inden der overhovedet skete kald til databasen. For at udføre kaldet til databasen skal betingelsen "besked < 255" være opfyldt:

protected void SubmitBtn_Click(object sender, EventArgs e)
    {
        try
        {
            string navn = this.NavntxtB.Text.ToString();
            string adresse = this.emailTxtB.Text.ToString();
            string besked = this.beskedTxtB.Text.ToString();
            string dag = System.DateTime.Now.ToLongDateString();
            string klok = System.DateTime.Now.ToLongTimeString();
            string dato = dag+" "+klok;
            if (!(besked.Length > 255))
            {
                this.conn = this.establishConnection();
                this.conn.Open();
                comm = new OleDbCommand(null, conn);
                comm.CommandText = "INSERT INTO guestentries VALUES (?,?,?,?)";
                comm.Parameters.Add("navn", OleDbType.Char, 50);
                comm.Parameters.Add("email", OleDbType.Char, 50);
                comm.Parameters.Add("besked", OleDbType.Char, 255);
                comm.Parameters.Add("dato", OleDbType.DBTimeStamp, 19);
                comm.Prepare();
                comm.Parameters["navn"].Value = navn;
                comm.Parameters["email"].Value = adresse;
                comm.Parameters["besked"].Value = besked;
                comm.Parameters["dato"].Value = dato;
                comm.ExecuteNonQuery();
                this.conn.Close();
                this.cleanUp();
                this.GridView1Databind();
            }
            else
            {
                this.Label1.ForeColor = System.Drawing.Color.Red;
                this.Label1.Text = "beskeden er alt for lang";
                this.beskedTxtB.Text = "";
            }
        }
        catch (Exception error) {
            this.Label1.Text = error.Message.ToString();
        }
    }

Herudover er der egentlig ikke så meget at sige.
mdb-filen er i den zippede fil. Udpak og gå ind i mappen app_data - jeg HAR slettet mine testdata.

Hvis du vil køre programmet skal du rette data source til at pege der hvor du placerer mdb-filen. Der er intet i vejen for at det f.eks. er sådan her: @"Data Source=C:\Documents and Settings\guestbook.mdb".

Men et screenshot skal der vel være? screenshot af gæstebog




Henriette Rømer Dreier - 11. april 2006







Download den samlede kode som .zip-fil



Indhold af Greetings.aspx.cs

Indhold af Greetings asp.net server page

Valid CSS!

Valid XHTML 1.0!