Inhalt
Vorwort
1 Wie .NET und ASP.NET funktionieren
2 Installation
3 Hinweise zu VB.NET
4 »Hallo, Welt!« – Ein ASP.NET-Crashkurs
5 Die Page-Klasse
6 HTML-Serversteuerelemente
7 Validierung von Anwendereingaben
8 Webserversteuerelemente
9 Webserversteuerelemente für die Darstellung von Listen
10 Webserversteuerelemente selbst erstellen
11 Der Status von Seiten, Sitzungen und Applikationen
12 ASP.NET und Datenbanken
13 »Wer darf was?« ASP.NET und Sicherheit
14 Webanwendungen erstellen und konfigurieren
15 Leistungssteigerung durch Caching
16 Web Services
A Anhang
Index
Download (ca 14,3 MB)
Buch bestellen (29,90 EUR)
Ihre Meinung?@
<< zurück | Galileo Computing / <openbook> / Einstieg in ASP.NET | vor >>
Einstieg in ASP.NET von Matthias Lohrer
| Kapitel 12 ASP.NET und Datenbanken
|  | 12.1 Auf Datenbanken zugreifen – ein Crashkurs
|  |  | 12.1.1 Eine Tabelle im Browser anzeigen
|  |  | 12.1.2 Über den Browser einen Datensatz hinzufügen
|  | 12.2 Wie ADO.NET funktioniert – ein Überblick
|  | 12.3 Die Verbindung zur Datenbank herstellen
|  |  | 12.3.1 OleDbConnection
|  |  | 12.3.2 SqlConnection
|  | 12.4 Daten lesen mit SqlCommand und OleDbCommand
|  |  | 12.4.1 ExecuteReader
|  |  | 12.4.2 ExecuteNonQuery und die Parameters-Collection
|  |  | 12.4.3 ExecuteScalar
|  | 12.5 SqlDataReader und OleDbDataReader
|  |  | 12.5.1 Ein Reader-Objekt an ein Steuerelement binden
|  |  | 12.5.2 Ein Reader-Objekt an ein Listensteuerelement binden
|  |  | 12.5.3 Ein Reader-Objekt zeilenweise auswerten
|  | 12.6 Die DataSet-Klasse
|  |  | 12.6.1 Das Zusammenspiel von Command, Adapter und DataSet
|  |  | 12.6.2 Mehrere Tabellen in ein DataSet-Objekt einlesen
|  |  | 12.6.3 Auf einzelne Zeilen, Spalten und Tabellen eines DataSet-Objekts gezielt zugreifen
|  |  | 12.6.4 Relationen zwischen Tabellen festlegen
|  | 12.7 DataViews verwenden
|  |  | 12.7.1 Tabellen sortieren
|  |  | 12.7.2 Tabellen nach Inhalten filtern
|  |  | 12.7.3 Nach dem Zeilenstatus filtern
|  |  | 12.7.4 In Tabellen suchen
|  | 12.8 Mit ASP.NET Daten bearbeiten
|  | 12.9 Daten bearbeiten mit dem Command-Objekt
|  | 12.10 In-Place-Editing mit dem DataGrid-Steuerelement
|  |  | 12.10.1 Die EditItemIndex-Eigenschaft
|  |  | 12.10.2 Das asp:DataGrid-Tag anpassen
|  |  | 12.10.3 OnEditCommand: Daten bearbeiten
|  |  | 12.10.4 OnCancelCommand: Die Bearbeitung abbrechen
|  |  | 12.10.5 OnUpdateCommand: Die Änderungen sichern
|  |  | 12.10.6 Das Repeater-Steuerelement verwenden
|  |  | 12.10.7 Die Ereignisse des Repeater-Steuerelements auswerten
|  | 12.11 Das DataList-Steuerelement
|  |  | 12.11.1 In-Place-Editing mit dem DataList-Steuerelement
## 12.4 Daten lesen mit SqlCommand und OleDbCommand Mit Hilfe der Klassen OleDbCommand beziehungsweise SqlCommand führen Sie ein Datenbankkommando aus. Hier können Sie SQL-Statements angeben oder gespeicherte Prozeduren anstoßen. OleDbCommand kennt drei Methoden:
| E ExecuteReader führt solche Befehle aus, die Tabellenzeilen als Ergebnis zurückgeben, z. B. SELECT * FROM table_x, und liefert das Resultat in Form eines Objekts vom Typ OleDbDataReader (SqlDataReader).
| E ExecuteNonQuery führt solche Befehle aus, die keine Tabellenzeilen zurückgeben, wie z. B. die SQL-Anweisungen INSERT, DELETE, SET und UPDATE.
| E ExecuteScalar führt solche Befehle aus, die einen einzelnen Wert, z. B. einen Aggregatwert, zurückgeben.
Die Klasse SqlCommand fügt diesen drei Methoden noch die Methode ExecuteXmlReader hinzu. Diese Methode arbeitet wie ExecuteReader und gibt das Ergebnis als Objekt vom Typ XmlReader zurück. ### 12.4.1 ExecuteReader Die Methode ExecuteReader sendet den Inhalt von CommandText unter Berücksichtigung von CommandType an die Datenbankverbindung und stellt das Ergebnis in einem Objekt vom Typ OleDbDataReader zur Verfügung. Die Eigenschaft CommandText kann drei Arten von Einträgen aufnehmen:
| einen SQL-Befehl oder
| den Namen einer Stored Procedure oder
| den Namen einer Tabelle.
Mit der Eigenschaft CommandType legen Sie fest, welche Art von Eintrag CommandText enthält:
| E CommandType.Text ist die Default-Einstellung. Damit sind SQL-Befehle möglich.
| E CommandType.StoredProcedure
| E CommandType.TableDirect
Mit CommandType.TableDirect haben Sie die Möglichkeit, eine komplette Tabelle einzulesen. In diesem Fall geben Sie in CommandText lediglich den Namen der Tabelle an. Im einleitenden Abschnitt 12.1, Auf Datenbanken zugreifen – ein Crashkurs, hat die Beispielseite db_01.aspx den Zugriff auf eine Tabelle mit der Methode ExecuteReader gezeigt. Nachdem eine Verbindung zur Datenbank aufgebaut wurde, lauten die entscheidenden Code-Zeilen:
       Dim sql As String

       sql = "SELECT * FROM Versandfirmen"

       Dim cmd As New OleDbCommand(sql, conn)

       Dim myDataReader As OleDbDataReader

       myDataReader = cmd.ExecuteReader()

       myGrid.DataSource = myDataReader

       DataBind()
Die Klasse OleDbCommand bietet vier verschiedene Konstruktoren an. Mit der Zeile Dim cmd As New OleDbCommand(sql, conn) werden die Eigenschaften CommandText und Connection definiert. Nach der Deklaration eines OleDbDataReader-Objekts kann die Reader-Klasse mit einer Zeile gefüllt werden:
    myDataReader = cmd.ExecuteReader()
Das Reader-Objekt lässt sich schließlich als Datenquelle an das DataGrid-Steuerelement binden.
    myGrid.DataSource = myDataReader

    DataBind()
Da der Code die Eigenschaft CommandType nicht explizit setzt, geht ASP.NET von der Standardeigenschaft CommandType.Text aus, mit der sich SQL-Befehle ausführen lassen. ### 12.4.2 ExecuteNonQuery und die Parameters-Collection Die Methode ExecuteNonQuery verwenden Sie für solche SQL-Befehle, die keine Datensätze als Ergebnis zurückgeben. Dazu zählen z. B. INSERT, UPDATE, DELETE, das Erstellen von Tabellen und die Abfrage von Datenbankstrukturen. Der einleitende Abschnitt 12.1, Auf Datenbanken zugreifen – ein Crashkurs, hat mit db_02.aspx auch hierfür ein kleines Beispiel gebracht. Bei einem Postback wurde an die Tabelle Versandfirmen ein neuer Datensatz mit den Angaben des Anwenders angefügt.
       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
Der SQL-Befehl, der in CommandText gespeichert wird, enthält noch nicht die genauen Angaben für die hinzuzufügende Firma und die Telefonnummer, sondern zunächst nur die Platzhalter @Firma und @Telefon. Die Methode ExecuteNonQuery() ersetzt diese Platzhalter gegen die Werte, die in der zugehörigen OleDbParameterCollection gespeichert sind. Diese Collection ist über die Parameters-Eigenschaft zugänglich. Mit der Add-Methode fügen Sie Parameter hinzu.
          iCmd.Parameters.Add("@Firma", txtFirma.value)
          iCmd.Parameters.Add("@Telefon", txtTelefon.value)
Achtung Diese Add-Methode sieht intelligenter aus, als sie in Wirklichkeit ist. Tatsächlich unterstützt der OLE-DB-.NET-Provider gar keine benannten Parameter, sondern wertet die Parameter einfach in der Reihenfolge aus, in der sie ihm mitgeteilt werden. Wenn Sie die beiden Zeilen iCmd.Parameters.Add ... gegeneinander austauschen und erneut einen Test ausführen, werden Sie sehen, dass dann die Telefonnummer in der Spalte für den Firmennamen erscheint und andersherum.
Wenn Sie die Parameter nicht nur in der richtigen Reihenfolge hinzufügen, sondern gleichzeitig auch benennen, hat das den Vorteil, dass bei einem Wechsel zur SqlCommand-Klasse an dieser Stelle keine Änderung erforderlich ist, denn der SQL-Server-.NET-Provider verwendet benannte Parameter. ### 12.4.3 ExecuteScalar Wenn Sie lediglich einen einzelnen Wert aus einer Datenbank extrahieren möchten, dann bietet die Methode ExecuteScalar hierfür die effizienteste Möglichkeit. Mit ExecuteScalar können Sie Aggregatwerte, aber auch die Inhalte einzelner Tabellenzellen auslesen. db_05.aspx demonstriert, wie Sie mit der Methode ExecuteScalar beispielsweise die Anzahl der vorhandenen Tabellenzeilen ermitteln können. Abbildung 12.7 zeigt die Darstellung im Browser.
    <!-- db_05.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 COUNT (*) FROM Versandfirmen"
       Dim cmd As New OleDbCommand(sql, conn)
       Dim ergebnis As String
       ergebnis = cmd.ExecuteScalar().toString()
       Dim t As String
       t = "Die Tabelle Versandfirmen hat " & _
           ergebnis & " Zeilen. <br>" & _
           "Das Kommando lautet: " & _
           cmd.CommandText & "<br>" & _
           "Der Kommandotyp ist: " & _
           cmd.CommandType

       ausgabe.innerHTML = t

    End Sub
    </script>
    <html><head><title>
    Demo zu OleDbCommand.ExecuteScalar
    </title></head>
    <body>
    <h3>Demo zu OleDbCommand.ExecuteScalar</h3>
    <p runat="server" id="ausgabe" />
    </body></html>
Hier klicken, um das Bild zu Vergrößern Abbildung 12.7 Mit der Methode ExecuteScalar rufen Sie einzelne Werte aus einer Datenbank ab. ExecuteScalar gibt stets ein Objekt vom Typ Object zurück, so dass Sie das Ergebnis in der Regel zunächst konvertieren sollten. Mit cmd.ExecuteScalar().toString() schließen Sie an den Aufruf der Methode direkt die Konvertierung zu einem String an.
       Dim ergebnis As String
       ergebnis = cmd.ExecuteScalar().toString()
Konstruktoren
New() New(String) New (String, OleDbConnection) New (String, OleDbConnection, OleDbTransaction) | Der übergebene String enthält den CommandText.
Eigenschaften
CommandText | String | SQL-Anweisung oder Name der gespeicherten Prozedur oder der Name der Tabelle (dann: CommandType = "TableDirect")
CommandTimeOut | Integer | Anzahl Sekunden, die bei Befehlsausführung gewartet wird, bis ein Fehler generiert wird
CommandType | CommandType | Gültige Werte sind: Text (Default), StoredProcedure, TableDirect.
Connection | OleDbConnection | Die verwendete Verbindung
Parameters | OleDbParameterCollection | Die Parameter der SQL-Anweisung oder der gespeicherten Prozedur, sofern nötig
Transaction | OleDbTransaction | Die Transaktion, in der das Kommando ausgeführt wird
UpdatedRowSource | UpdateRowSource | Gibt an, wie Ergebnisse von Abfragebefehlen auf die aktualisierte Zeile angewendet werden
Methoden
Cancel() |  | Versucht, die Ausführung eines Befehls abzubrechen
CreateParameter() | OleDBParameter | Erstellt eine neue Instanz eines OleDbParameter-Objekts
ExecuteNonQuery() | Integer | Führt die Anweisung (CommandText) aus und gibt die Anzahl der betroffenen Zeilen oder –1 zurück
ExecuteReader() | OleDbDataReader | Führt die Anweisung aus und liefert die gefundenen Tabellenzeilen in einem OleDbDataReader-Objekt
ExecuteScalar() | Object | Führt die Anweisung aus und gibt den Wert der ersten Zeile der ersten Spalte zurück
Prepare() |  | Erstellt für den Befehl eine vorbereitete Version
ResetCommandTimeout() |  | Setzt die CommandTimeout-Eigenschaft auf den Standardwert (30 s) zurück
Tabelle 12.3 Steckbrief der Klasse OleDbCommand
<< zurück | <top> | vor >>
Zum Katalog
Einstieg in ASP.NET bestellen
Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen? Ihre Meinung

.NET-Bibliothek
| Einstieg in VB.NET
| VB.NET
| Einstieg in C#
| Visual C#
| VB.NET und Datenbanken

Empfehlung
| Einstieg in XML

Shopping
Versandkostenfrei bestellen in Deutschland und Österreich Info

MyGalileo
Der Service für registrierte Leser: Info

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