12.3 Die Verbindung zur Datenbank herstellen
 
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.
12.3.1 OleDbConnection
 
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.
 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
12.3.2 SqlConnection
 
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>
 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
|