Kapitel 12 ASP.NET und Datenbanken
Für die Arbeit mit Datenbanken hält ASP.NET viele leistungsfähige Hilfsmittel bereit. Entwickler, die Daten über Webschnittstellen bearbeiten möchten, können mit ASP.NET schnell und effizient komfortable Benutzeroberflächen entwickeln.
Um dieses Kapitel auf dem eigenen Rechner nachvollziehen zu können, benötigen Sie entweder Access oder einen SQL Server oder die MSDE. Als Testdatenbank wird die Nordwind-Datenbank verwendet, die Microsoft jeweils als Beispieldatenbank mitliefert.
»Mit ADO.NET wird alles ganz anders.« So oder ähnlich beginnen viele Beiträge zum Thema Datenbankzugriff unter ASP.NET und stimmen den Leser und Entwickler damit auf ein langwieriges Erlernen der neuen Technologie ein. Aber, ach was! Es geht doch immer um das Gleiche. Hier liegen die Daten in einer relationalen Datenbank. Und da ist das universale Anzeigetool dieser Tage: der Webbrowser. Von hier sollen die Daten da hinein. Und das kann ja wohl nicht so schwierig sein. Ist es auch nicht. Deswegen zeige ich erst einmal, wie es geht. Und erkläre anschließend, was dabei eigentlich passiert.
12.1 Auf Datenbanken zugreifen – ein Crashkurs
 
12.1.1 Eine Tabelle im Browser anzeigen
 
Die Seite db_01.aspx liest die Tabelle Versandfirmen aus der Nordwind-Datenbank aus und zeigt sie in Form einer HTML-Tabelle an:
<!-- db_01.aspx -->
<%@ Page Language="VB" Debug="True" Strict="True" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<script runat="server">
Sub Page_Load (ByVal Sender As Object, _
ByVal E As EventArgs)
' Verbindungszeichenfolge zusammensetzen
Dim connStr As String
connStr = "Provider=Microsoft.Jet.OLEDB.4.0;"
connStr += _
"Data Source=E:\ASPdotNETBuch\Listings\Nordwind.mdb;"
' Verbindung zur Datenbank herstellen
Dim conn As New OleDbConnection(connStr)
conn.Open()
' SQL-Kommando erstellen und ausführen
Dim sql As String
sql = "SELECT * FROM Versandfirmen"
Dim cmd As New OleDbCommand(sql, conn)
Dim myDataReader As OleDbDataReader
myDataReader = cmd.ExecuteReader()
' SQL-Resultat an ein Steuerelement binden
myGrid.DataSource = myDataReader
DataBind()
myDataReader.Close()
conn.Close()
End Sub
</script>
<html><head><title>
Daten aus einer Datenbank auslesen
</title></head>
<body>
<h3>Daten aus einer Datenbank auslesen</h3>
<p>Die Nordwind-Datenbank verzeichnet folgende
Versandfirmen:</p>
<asp:DataGrid id="myGrid" runat="server" />
</body></html>
Abbildung 12.1 zeigt die Darstellung im Browser. Als Beleg dafür, dass hier alles mit rechten Dingen zugeht, zeigt Abbildung 12.2 den erzeugten HTML-Code: eine schlichte HTML-Tabelle. Und als Beweis, dass auch die korrekten Daten gelesen wurden, zeigt Abbildung 12.3, wie Access die Tabelle darstellt.
 Hier klicken, um das Bild zu Vergrößern
Abbildung 12.1 Diese Tabelle stammt aus der Nordwind-Datenbank.
 Hier klicken, um das Bild zu Vergrößern
Abbildung 12.2 Die Darstellung basiert auf einer schlichten HTML-Tabelle.
 Hier klicken, um das Bild zu Vergrößern
Abbildung 12.3 So zeigt Access die Tabelle an.
In der aspx-Seite sehen Sie wenige Zeilen Code mit maximaler Wirkung. Mit Hilfe der OleDbConnection-Klasse wird eine Verbindung zur Datenbank aufgebaut. Als Nächstes wird ein SQL-Kommando erstellt und ausgeführt. Die Klassen OleDbCommand und OleDbDataReader spielen hier eine gewisse Rolle. Und dann sorgen zwei weitere Zeilen dafür, dass das Recherche-Ergebnis an das DataGrid-Steuerelement gebunden wird, das seinerseits für die HTML-Darstellung zuständig ist. Das OleDbDataReader- und das OleDbConnection-Objekt werden wieder geschlossen, und das war es dann auch schon. Mehr ist nicht nötig, wenn Sie eine Datenbanktabelle im Browser anzeigen lassen wollen. Und der erzeugte HTML-Code ist so simpel, dass auch jeder alte Browser damit zurechtkommt.
12.1.2 Über den Browser einen Datensatz hinzufügen
 
Ist es genauso einfach, die Daten zu bearbeiten? Ja, das geht. Den Schlüssel für die Bearbeitung stellt die Methode ExecuteNonQuery() der OleDbCommand-Klasse dar. db_02.aspx demonstriert ein einfach zu realisierendes Beispiel. Die Seite listet die verfügbaren Versandfirmen auf und bietet anschließend die Möglichkeit, einen neuen Versender hinzuzufügen.
Der komplette Code liegt wieder in der Prozedur Page_Load. Nach dem Aufbau der Verbindung zur Datenbank wird zunächst geprüft, ob ein Postback vorliegt. In diesem Fall werden die Eingabedaten des Formulars gelesen und an die Datenbank angefügt. Erst anschließend folgt der Code, der die Tabelle darstellt. Weil erst eingefügt und dann ausgelesen wird, enthalten die ausgelesenen Daten stets den neu eingefügten Datensatz. Wenn kein Postback vorliegt, werden lediglich die Daten ausgelesen und angezeigt. Den SQL-Befehl weisen Sie der Eigenschaft CommandText zu. Dabei müssen Sie die variablen Bestandteile aber nicht in diesen String einbauen, sondern können dafür die Parameters-Eigenschaft verwenden. Im SQL-Befehl kennzeichnen Sie die Platzhalter durch ein führendes @-Zeichen. Der zusammenhängende Code ist deutlicher als jede Erklärung:
<!-- db_02.aspx -->
<%@ Page Language="VB" Debug="True" Strict="True" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<script runat="server">
Sub Page_Load (ByVal Sender As Object, _
ByVal E As EventArgs)
' Verbindungszeichenfolge zusammensetzen
Dim connStr As String
connStr = "Provider=Microsoft.Jet.OLEDB.4.0;"
connStr += _
"Data Source=E:\ASPdotNETBuch\Listings\Nordwind.mdb;"
' Verbindung zur Datenbank herstellen
Dim conn As New OleDbConnection(connStr)
conn.Open()
' Bei einem Postback einen Datensatz anfügen
If IsPostBack Then
Dim iCmd As New OleDbCommand()
iCmd.Connection = conn
iCmd.Parameters.Add("@Firma", txtFirma.value)
iCmd.Parameters.Add("@Telefon", txtTelefon.value)
iCmd.CommandText = "INSERT INTO Versandfirmen "
iCmd.CommandText += "(Firma, Telefon) "
iCmd.CommandText += "VALUES (@Firma, @Telefon)"
iCmd.ExecuteNonQuery()
End If
' SQL-Kommando erstellen und ausführen
Dim sql As String
sql = "SELECT * FROM Versandfirmen"
Dim cmd As New OleDbCommand(sql, conn)
Dim myDataReader As OleDbDataReader
myDataReader = cmd.ExecuteReader()
' SQL-Resultat an ein Steuerelement binden
myGrid.DataSource = myDataReader
DataBind()
myDataReader.Close()
conn.Close()
End Sub
</script>
<html><head><title>
Datensätze hinzufügen
</title></head>
<body>
<h3>Datensätze hinzufügen</h3>
<p>Die Nordwind-Datenbank verzeichnet folgende
Versandfirmen:</p>
<asp:DataGrid id="myGrid" runat="server" />
<br>
<form runat="server">
<p>Neue Versandfirma hinzufügen:</p>
Firmenname<br>
<input type="text" runat="server" id="txtFirma"><br>
Telefon<br>
<input type="text" runat="server" id="txtTelefon"><br>
<input type="submit" runat="server" value="Hinzufügen">
</form></body></html>
Abbildung 12.4 zeigt die Darstellung im Browser, nachdem ein neuer Datensatz hinzugefügt wurde. Wer will, kann auf ähnliche Weise dem Anwender ermöglichen, die vorhandenen Daten zu bearbeiten. Der Anwender benötigt eine Möglichkeit, einen Datensatz zu selektieren und anschließend die Felder Firma und Telefon zu editieren. In der Eigenschaft CommandText legen Sie den entsprechenden SQL-Befehl zurecht und über die Parameters-Auflistung stellen Sie die Eingaben des Anwenders bereit. Mehr ist nicht nötig, um auf einfache Art und Weise die Inhalte der Datenbank zu aktualisieren.
 Hier klicken, um das Bild zu Vergrößern
Abbildung 12.4 Mit der Methode ExecuteNonQuery des OleDbCommand-Objekts führen Sie SQL-Statements aus, die keine Daten zurückgeben, z. B. INSERT-Anweisungen.
Mit Hilfe der DataSet-Klasse lassen sich solche Bearbeitungsvorgänge übrigens noch weiter automatisieren. Ein entsprechendes Beispiel würde allerdings den Rahmen dieses kleinen vorgeschalteten Crashkurses sprengen. Sie konnten zunächst erkennen, dass auch ADO.NET offenkundig nur mit Wasser kocht. Allerdings hat ADO.NET auch noch erheblich mehr zu bieten, als die beiden Beispiele zeigen konnten. Diese weiter gehenden Möglichkeiten werden Sie auf den folgenden Seiten kennen lernen.
|