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)
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.
Nach Eingabe eines Datensatzes mit einer Personalnummer, die bereits in der Tabelle vorkommt, sieht das Ergebnis aus wie in Abbildung 9.12.
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.11 Datensatz ohne Personalnummer
Abbildung 9.12 Doppelter Wert
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.ACE.OLEDB.12.0;" &
"Data Source=C:\Temp\firma.accdb"
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.
- 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.
- 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.
- 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.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.