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


Galileo Computing

12.3 Die Verbindung zur Datenbank herstellen  downtop

Es hängt von der von Ihnen verwendeten Datenbank ab, mit welcher Klasse Sie die Verbindung zur Datenbank herstellen können.

Mit Hilfe der Klasse SqlConnection bauen Sie eine Verbindung zu einem Microsoft SQL Server ab Version 7.0 auf. Da die Microsoft Data Engine MSDE über identische Schnittstellen verfügt, können Sie auch die MSDE mit dieser Klasse ansprechen.

Für SQL Server 6.5 und darunter, für Access-Datenbanken und für Oracle-Datenbanken verwenden Sie die OleDbConnection-Klasse.

Für die Verbindung zu anderen ODBC-Datenquellen stellt Microsoft unter http://msdn.microsoft.com/downloads entsprechende Klassen zum Download zur Verfügung.


Galileo Computing

12.3.1 OleDbConnection  downtop

Wenn Sie mit der Klasse OleDbConnection eine Verbindung zu einer Datenquelle aufbauen möchten, dann geben Sie in der Eigenschaft ConnectionString die Verbindungszeichenfolge an. Diese Verbindungszeichenfolge enthält den Namen der Datenquelle und weitere Angaben, die für die Herstellung der Verbindung erforderlich sind.

Innerhalb der Verbindungszeichenfolge ist die Angabe Provider=... immer erforderlich. Welche weiteren Klauseln angegeben werden können, hängt vom jeweiligen Provider ab.

Die Schlüssel-Wert-Paare werden durch ein Semikolon getrennt. Die .NET-Dokumentation nennt einige Beispiele gültiger Verbindungszeichenfolgen:

Provider=MSDAORA; Data Source=ORACLE8i7; User ID=OLEDB; Password=OLEDB
Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\bin\LocalAccess40.mdb;
Provider=SQLOLEDB;Data Source=MySQLServer;Integrated Security=SSPI;

Die Verbindungszeichenfolge können Sie dem OleDbConnection-Konstruktor beispielsweise als Parameter übergeben. db_03.aspx demonstriert den Verbindungsaufbau zu einer Access-Datenbank und Abbildung 12.5 zeigt die Darstellung im Browser.

<!-- db_03.aspx --> 
<%@ Page Language="VB" Debug="True" Strict="True" %>
<%@ 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;"
   Dim conn As New OleDbConnection(connStr)
   Dim t As String
   
  ' Verbindung zur Datenbank herstellen
   Try 
      conn.Open()
      ' Verbindungsmerkmale darstellen
      t ="Merkmale der OleDbConnection-Verbindung:" & _
          "<br><br>" & _ 
          "<b>ConnectionString:</b> " & _
          conn.ConnectionString & "<br>" & _
          "<b>ConnectionTimeout:</b> " & _
          conn.ConnectionTimeout &  "<br>" & _
          "<b>Database:</b> " & _
          conn.Database &  "<br>" & _
          "<b>DataSource:</b> " & _
          conn.DataSource &  "<br>" & _
          "<b>Provider:</b> " & _
          conn.Provider &  "<br>" & _
          "<b>ServerVersion:</b> " & _
          conn.ServerVersion &  "<br>" & _
          "<b>State:</b> " & _
          conn.State.toString()
      
   Catch exc As InvalidOperationException
      ' Die Verbindung ist bereits geöffnet.
      t += exc.Message
         
   Catch exc As OleDbException
      t = "Fehler auf Verbindungsebene: "
      t += exc.ErrorCode & "<br><br>" 
      t += exc.Message
   
   Finally 
      conn.Close()
      
   End Try
   ausgabe.innerHTML = t
End Sub
</script>
<html><head><title>OleDbConnection-Demo</title></head>
<body>
<h3>Mit der OleDbConnection-Klasse eine Verbindung zu 
einer Datenbank aufbauen </h3>
<p id="ausgabe" runat="server"></p></body></html>

Der Prozedur Page_Load bettet den Aufruf von conn.Open() in ein Try ... Catch ... Finally-Konstrukt ein. Ähnlich wie beim Zugriff auf das Dateisystem kann auch beim Zugriff auf eine Datenbank einiges schief gehen, worauf der Code entsprechend vorbereitet sein sollte.

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

Abbildung 12.5 Der Verbindungsaufbau zur Access-Datenbank erfolgt über die OleDbConnection-Klasse.

Wenn die Verbindung zustande kommt, gibt die Prozedur die diversen Eigenschaften des OleDbConnection-Objekts aus. Die Prozedur behandelt außerdem zwei unterschiedliche Arten von Ausnahmen. Der Fehler vom Typ InvalidOperationException tritt auf, wenn versucht wird, eine bereits etablierte Verbindung erneut zu öffnen.


Tipp   Sie können den Fehler leicht simulieren, indem Sie den Befehl conn.Open() direkt vor die Try-Anweisung schreiben.

Falls beim Verbindungsaufbau selbst etwas schief geht, wird ein Fehler vom Typ OleDbException ausgelöst. Auch diesen Fehler können Sie leicht simulieren, indem Sie beispielsweise einen ungültigen Pfad zur Datenbankdatei angeben.

Der Code füllt seine Erkenntnisse über den Datenbankzugriff in eine String-Variable. Weil die Aufgabe des Datenbankzugriffs damit erledigt ist, wird die Verbindung im Finally-Abschnitt wieder geschlossen. Der Aufruf von conn.Close() würde auch dann keinen Fehler verursachen, wenn die Verbindung gar nicht aufgebaut werden konnte. Eine Verbindung wird nicht automatisch geschlossen, sondern muss stets explizit geschlossen werden.


Konstruktoren
New()
New(ConnectionString)
Dem Konstruktur kann die Verbindungszeichenfolge mit übergeben werden.
Eigenschaften
ConnectionString String Verbindungszeichenfolge
ConnectionTimeout Integer Zeit, die beim Aufbau der Verbindung gewartet wird, bis ein Fehler gemeldet wird
DataBase String Name der verwendeten Datenbank
DataSource String Speicherort und Dateiname der Datenquelle
Provider String Name des OLE-DB-Providers, wie er in der »Provider=...«-Klausel angegeben wurde
ServerVersion String Version des Servers
State ConnectionState Aktueller Verbindungsstatus. Möglich sind Broken, Closed, Connecting, Executing, Fetching und Open.
Methoden
BeginTransaction() OleDbTransaction Startet eine Datenbanktransaktion
ChangeDatabase
(newdb)
Wechselt die Datenbank
Close() Schließt die Verbindung zur Datenquelle
CreateCommand() OleDbCommand Erstellt ein OleDbCommand-Objekt, das dieser OleDbConnection zugeordnet ist
GetOleDbSchemaTable(Guid, restrictions()) DataTable Liefert Schemainformationen entsprechend den Angaben eines GUID und nach Anwendung der genannten Einschränkungen
Open() Öffnet die Verbindung zu der in ConnectionString genannten Datenquelle

Tabelle 12.1 Steckbrief zur Klasse OleDbConnection


Galileo Computing

12.3.2 SqlConnection  toptop

db_04.aspx leistet im Wesentlichen das Gleiche auf Basis des SqlConnection-Objekts. Abbildung 12.6 zeigt die Darstellung im Browser, wenn die Verbindung zu einer MSDE-Instanz aufgebaut werden konnte.

<!-- db_04.aspx --> 
<%@ Page Language="VB" Debug="True" Strict="True" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<script runat="server">
Sub Page_Load (ByVal Sender As Object, _
               ByVal E As EventArgs)
   ' Verbindungszeichenfolge zusammensetzen
   Dim connStr As String 
   connStr = "server=(local)\NetSDK;"
   connStr += "database=pubs;"
   connStr += "Trusted_Connection=yes"
   Dim t As String
   Dim conn As New SqlConnection(connStr)
   
  ' Verbindung zur Datenbank herstellen
   Try 
      conn.Open()
      ' Verbindungsmerkmale darstellen
      t = "Merkmale der SqlConnection-Verbindung:" & _
          "<br><br>" & _ 
          "<b>ConnectionString:</b> " & _
          conn.ConnectionString & "<br>" & _          
          "<b>ConnectionTimeout:</b> " & _
          conn.ConnectionTimeout &  "<br>" & _
          "<b>Database:</b> " & _
          conn.Database &  "<br>" & _
          "<b>DataSource:</b> " & _
          conn.DataSource &  "<br>" & _
          "<b>PacketSize:</b> " & _
          conn.PacketSize &  "<br>" & _
          "<b>ServerVersion:</b> " & _
          conn.ServerVersion &  "<br>" & _
          "<b>State:</b> " & _
          conn.State.toString()
      
   Catch exc As InvalidOperationException
      ' Die Verbindung ist bereits geöffnet.
      t += exc.Message
         
   Catch exc As SqlException
      t = "Fehler auf Verbindungsebene: " 
      t += exc.Message
   
   Finally 
      conn.Close()
      
   End Try
   ausgabe.innerHTML = t
End Sub
</script>
<html><head><title>SqlConnection-Demo</title></head>
<body>
<h3>Mit der SqlConnection-Klasse eine Verbindung zu 
einer Datenbank aufbauen </h3>
<p id="ausgabe" runat="server"></p></body></html>

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

Abbildung 12.6 Der Namespace System.Data.SqlClient optimiert den Zugriff auf den MS SQL Server ab Version 7.0 und auf die MSDE.

Die Angabe Trusted_Connection=yes in der Verbindungszeichenfolge bewirkt, dass die Verbindung die integrierte Windows-Authentifizierung für die Anmeldung verwendet. Das bedeutet, dass Sie den Kontonamen und das Passwort nicht im Code speichern müssen.


Tipp   Im Unterschied zum OleDbConnection-Objekt verfügt das SqlConnection-Objekt nicht über die Eigenschaft Provider. Kein Wunder, denn hier ist der SQL Server als Provider vordefiniert. Dafür gibt es zusätzlich die Eigenschaft PacketSize. Je nach Art der übertragenen Daten können kleinere oder größere Werte den Durchsatz erhöhen.

Tabelle 12.2 beschreibt einige der in Verbindungszeichenfolgen oft verwendeten Schlüsselworte. Es gibt noch einige weitere Klauseln, die verschiedene Timeout-Werte setzen und das Verbindungs-Pooling regeln. Wer sich dafür interessiert, findet die Details dazu in der Online-Dokumentation zur SqlConnection.ConnectionString-Eigenschaft.


Name Beschreibung
Application Name Der Name der Anwendung, die diese Verbindung aufbaut
Data Source
oder
Server
oder
Address
oder
Addr
oder
Network Address
Der Name oder die Netzwerkadresse der Instanz von SQL Server, mit der eine Verbindung hergestellt werden soll
Initial Catalog
oder
Database
Der Name der Datenbank
Integrated Security
oder
Trusted_Connection
Gültige Werte sind true, false und sspi. Der Wert sspi entspricht true.
Password
oder
Pwd
Das Kennwort für das SQL-Server-Konto, das zur Anmeldung verwendet wird
User ID Das SQL-Server-Anmeldekonto

Tabelle 12.2 Einige Schlüsselwörter, die in der Verbindungszeichenfolge für das SqlConnection-Objekt verwendet werden können

  

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