9.10 Datenbank im Internet ändern 

Als Beispiel einer Datenbank-Änderung im Internet soll im folgenden Beispiel ein Datensatz zu einer Tabelle hinzugefügt werden. Das Hinzufügen mithilfe des SQL-Befehls insert wurde im Kapitel über ADO.NET bereits beschrieben.
In diesem Programm werden die folgenden Aktivitäten miteinander kombiniert:
- Senden und Auswerten von Formulardaten
- Kontrolle der Benutzereingaben
- Ausnahmebehandlung
- ASP.NET und ADO.NET (Zugriff auf eine Datenbank)
Anzeige und Eintrag
Im oberen Teil werden zunächst die vorhandenen Tabellendaten angezeigt. Im unteren Teil kann man die Daten eines neuen Datensatzes eintragen. Nach Eingabe eines Datensatzes ohne Personalnummer und dem Absenden sieht das Ergebnis aus wie in Abbildung 9.11.
Abbildung 9.11 Datensatz ohne Personalnummer
Nach Eingabe eines Datensatzes mit einer Personalnummer, die bereits in der Tabelle vorkommt, sieht das Ergebnis aus wie in Abbildung 9.12.
Abbildung 9.12 Doppelter Wert
Nach Eingabe eines Datensatzes mit einer Personalnummer, die noch nicht vorkommt, aber mit einem ungültigen Datum, erfolgt ebenfalls eine Fehlermeldung, siehe Abbildung 9.13.
Abbildung 9.13 Ungültiger Wert
Nach Eingabe eines gültigen Datensatzes sieht das Ergebnis aus wie in Abbildung 9.14.
Abbildung 9.14 Gültiger neuer Datensatz wurde eingefügt
Es folgt der Code der Seite default.aspx in der Web-Anwendung mit dem Namen WebDatenbankAktion:
<html> <head> <title>WebDatenbankAktion</title> <%@ page language="VB" %> <%@ import namespace="System.Data.OleDb" %> <script runat="server"> Sub Page_Load() Dim con As New OleDbConnection Dim cmd As New OleDbCommand Dim reader As OleDbDataReader Dim anzahl As Integer con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=C:\Temp\firma.mdb" cmd.Connection = con If IsPostBack Then Validate() If Not IsValid Then Exit Sub End If Try con.Open() cmd.CommandText = "insert into personen " & "(name, vorname, personalnummer, " & "gehalt, geburtstag) " & "values ('" & txtName.Value & "', '" & txtVorname.Value & "', " & txtPersonalnummer.Value & ", " & Replace(txtGehalt.Value, ",", ".") & ", '" & txtGeburtstag.Value & "')" ' ausgabe.Text = cmd.CommandText anzahl = cmd.ExecuteNonQuery() If anzahl > 0 Then ausgabe.Text = "Es wurde ein Datensatz eingefügt" End If Catch ex As Exception ausgabe.Text = ex.Message End Try con.Close() End If cmd.CommandText = "select * from personen" Try con.Open() reader = cmd.ExecuteReader() grid.DataSource = reader DataBind() reader.Close() Catch ex As Exception ausgabe.Text = ex.Message End Try con.Close() End Sub </script> </head> <body> <p>Datenbank-Tabelle</p> <asp:DataGrid id="grid" runat="server" /> <form id="Form1" runat="server"> <p><input type="text" runat="server" id="txtName" /> Name</p> <p><input type="text" runat="server" id="txtVorname" /> Vorname</p> <p><input type="text" runat="server" id="txtPersonalnummer" /> Personalnummer <asp:RequiredFieldValidator ID="RequiredFieldValidator1" ControlToValidate="txtPersonalnummer" Display="dynamic" runat="server"> Bitte eintragen </asp:RequiredFieldValidator></p> <p><input type="text" runat="server" id="txtGehalt" /> Gehalt</p> <p><input type="text" runat="server" id="txtGeburtstag" /> Geburtstag</p> <p><input id="Submit1" type="submit" runat="server" value="Senden" /> </form> <p><asp:Label id="ausgabe" runat="server" /></p> </body> </html>
Listing 9.11 Projekt »WebDatenbankAktion«, Datei »default.aspx«
Zur Erläuterung des Visual Basic-Blocks:
- Die Objekte für die Datenbank-Verbindung, den SQL-Befehl und den Reader für das Abfrage-Ergebnis werden initialisiert.
- Es kommt noch eine Variable zur Speicherung der Anzahl der geänderten Datensätze hinzu.
- Der Inhalt der ersten If-Verzweigung wird nur ausgeführt, wenn der Benutzer das Formular senden möchte und nicht, wenn er die Seite zum ersten Mal aufruft.
Validate()
- Die Benutzereingaben werden kontrolliert. Ergibt die Kontrolle einen Fehler (keine Personalnummer), so wird die Prozedur verlassen. Es wird der Text Bitte eintragen hinter dem Feld personalnummer eingeblendet. Das Formular wird nicht zum Webserver gesendet.
Try-Catch
- Es beginnt eine Ausnahmebehandlung. Diese ist besonders wegen der vielen möglichen Fehler bei der Benutzereingabe erforderlich.
- Der SQL-Befehl zum Einfügen eines Datensatzes wird mithilfe der Inhalte aus den Textfeldern des Formulars zusammengesetzt.
- Während der Entwicklung kann es nicht schaden, den Befehl zunächst zur Kontrolle auszugeben, statt ihn zu senden. Falls der SQL-Befehl als richtig erkannt wird, kann diese Anweisung wieder auskommentiert werden.
- Der SQL-Befehl zum Einfügen eines Datensatzes wird gesendet. Im Erfolgsfall wird ausgegeben, dass ein Datensatz hinzugefügt wurde.
IsPostBack
- Innerhalb der Verzweigung mit If IsPostBack wird der SQL-Befehl zum Anzeigen aller Datensätze erstellt.
- Der Inhalt der Datenbank-Tabelle, einschließlich des neuen Datensatzes, wird mithilfe des Server-Steuerelements vom Typ DataGrid ausgegeben.
- In diesem Programm wird die Verbindung eventuell zweimal geöffnet und wieder geschlossen, je nachdem, ob der Benutzer die Seite zum ersten Mal aufruft oder das Formular gesendet hat.
Zur Erläuterung des HTML-Containers:
- Hier befindet sich hinter der Überschrift und dem Server-Steuerelement vom Typ DataGrid das Eingabeformular.
- Das Eingabeformular beinhaltet fünf Textfelder für die Werte der fünf Felder eines neuen Datensatzes.
- Nach dem Textfeld personalnummer steht ein Server-Steuerelement vom Typ RequiredFieldValidator, mit dessen Hilfe kontrolliert wird, ob eine Personalnummer eingetragen wurde.
- Das unterste Label dient zur Ausgabe der Erfolgsmeldung oder der Fehlermeldungen bei der Ausnahmebehandlung.