Galileo Computing < openbook >
Galileo Computing - Programming the Net
Galileo Computing - Programming the Net


Einstieg in ASP.NET von Matthias Lohrer
Einstieg in ASP.NET
gp Kapitel 12 ASP.NET und Datenbanken
  gp 12.1 Auf Datenbanken zugreifen – ein Crashkurs
    gp 12.1.1 Eine Tabelle im Browser anzeigen
    gp 12.1.2 Über den Browser einen Datensatz hinzufügen
  gp 12.2 Wie ADO.NET funktioniert – ein Überblick
  gp 12.3 Die Verbindung zur Datenbank herstellen
    gp 12.3.1 OleDbConnection
    gp 12.3.2 SqlConnection
  gp 12.4 Daten lesen mit SqlCommand und OleDbCommand
    gp 12.4.1 ExecuteReader
    gp 12.4.2 ExecuteNonQuery und die Parameters-Collection
    gp 12.4.3 ExecuteScalar
  gp 12.5 SqlDataReader und OleDbDataReader
    gp 12.5.1 Ein Reader-Objekt an ein Steuerelement binden
    gp 12.5.2 Ein Reader-Objekt an ein Listensteuerelement binden
    gp 12.5.3 Ein Reader-Objekt zeilenweise auswerten
  gp 12.6 Die DataSet-Klasse
    gp 12.6.1 Das Zusammenspiel von Command, Adapter und DataSet
    gp 12.6.2 Mehrere Tabellen in ein DataSet-Objekt einlesen
    gp 12.6.3 Auf einzelne Zeilen, Spalten und Tabellen eines DataSet-Objekts gezielt zugreifen
    gp 12.6.4 Relationen zwischen Tabellen festlegen
  gp 12.7 DataViews verwenden
    gp 12.7.1 Tabellen sortieren
    gp 12.7.2 Tabellen nach Inhalten filtern
    gp 12.7.3 Nach dem Zeilenstatus filtern
    gp 12.7.4 In Tabellen suchen
  gp 12.8 Mit ASP.NET Daten bearbeiten
  gp 12.9 Daten bearbeiten mit dem Command-Objekt
  gp 12.10 In-Place-Editing mit dem DataGrid-Steuerelement
    gp 12.10.1 Die EditItemIndex-Eigenschaft
    gp 12.10.2 Das asp:DataGrid-Tag anpassen
    gp 12.10.3 OnEditCommand: Daten bearbeiten
    gp 12.10.4 OnCancelCommand: Die Bearbeitung abbrechen
    gp 12.10.5 OnUpdateCommand: Die Änderungen sichern
    gp 12.10.6 Das Repeater-Steuerelement verwenden
    gp 12.10.7 Die Ereignisse des Repeater-Steuerelements auswerten
  gp 12.11 Das DataList-Steuerelement
    gp 12.11.1 In-Place-Editing mit dem DataList-Steuerelement

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.


Galileo Computing

12.1 Auf Datenbanken zugreifen – ein Crashkurs  downtop


Galileo Computing

12.1.1 Eine Tabelle im Browser anzeigen  downtop

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.

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 12.1 Diese Tabelle stammt aus der Nordwind-Datenbank.

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 12.2 Die Darstellung basiert auf einer schlichten HTML-Tabelle.

Abbildung
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.


Galileo Computing

12.1.2 Über den Browser einen Datensatz hinzufügen  toptop

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.

Abbildung
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.

  

Einstieg in VB.NET

VB.NET

Einstieg in C#

Visual C#

VB.NET und Datenbanken

Einstieg in XML




Copyright © Galileo Press GmbH 2003
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de