Geschrieben von: Christian Holm
Kategorie: ADO.NET
This printed page brought to you by AlphaSierraPapa
Dieser Artikel beschreibt die grundlegenste Funktion von ADO.NET - den Zugriff auf eine Datenbank sowie das Befüllen eines sogenannten DataSets. Ein DataSet ist eine Struktur in ADO.NET, die zum Speichern von Daten und Datenbankstrukturen (wie Tabellen) dient. Zuerst werden wir eine Verbindung zu einer Datenbank mit Hilfe des OleDbConnection Objektes erstellen, und danach mit einem SQL-Statement eine Datenbankabfrage durchführen. Das Ergebnis der Abfrage wird in das DataSet geschrieben.
Der Einfachheit halber verzichte ich in diesem Artikel auf den Sourcecode der für ansprechende Darstellung im Browser zuständig ist. Diesen möchte ich Ihnen aber nur für den Moment vorenthalten, und werde ihn Ihnen in einem separaten Artikel präsentieren.
Bitte beachten Sie, daß dieser Artikel auf den Artikeln Was ist neu in ADO.NET und Das SQL Join Statement aufbaut. Da der Sourcecode der Beispiele in C# geschrieben ist, sollten Sie grundlegende Kenntnisse über dieser Programmiersprache haben - es finden sich dazu etliche Artikel bei AspHeute, die Ihnen das notwendige Wissen vermitteln.
Wenn Sie den Beispiel-Sourcecode (im Download 20001102.zip) selbst ausprobieren möchten, so benötigen Sie die Datenbanksoftware Microsoft SQL Server 7.0 (oder höher) - die Beispiele verwenden die folgende Zugangsberechtigung (Username / Password): uid=sa; pwd=;. Als Beispieldatenbank habe ich die Northwind Datenbank herangezogen. Diese ist standardmäßig in den Beispieldatenbanken des SQL Servers enthalten. Wenn die SQL Server Datenbank nicht auf dem lokalen Computer (dem Webserver) installiert ist, so müssen Sie zusätzlich den Data Source Parameter im Connection-String auf den Namen (oder die IP Adresse) des Datenbankservers ändern.
Um in ADO.NET eine Verbindung zu einer Datenbank zu erstellen, verwenden Sie das OleDbConnection Objekt. Da wir den Sourcecode in einer ASP.NET Seite verwenden, müssen wir auf zwei .NET Namespaces referenzieren um dieses Objekt benutzen zu können. Die beiden benötigten Namespaces sind in unserem Fall System.Data und System.Data.OleDb.
Sehen wir uns nun die Umsetzung im Sourcecode an. Der erste Teil des Sourcecodes enthält die Referenzen auf die benötigten Namespaces, die Deklaration des Connection-Strings strConn der die Parameter für die Datenbankverbingung enthält, sowie die Deklaration des SQL Statements (strSQL) zum Ausführen der Datenbankabfrage:
<%@ Page Language="C#" %> //Referenz auf die Namespaces <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.OleDb" %> <% // Deklaration des Connection Strings string strConn = "Provider= SQLOLEDB; Data Source=(local); " + "uid=sa; pwd=; Initial Catalog=Northwind;"; // Deklaration des SQL Statements string strSQL = "SELECT Productname, CompanyName, UnitPrice " + "FROM Suppliers " + "INNER JOIN Products ON " + "(Suppliers.SupplierID = Products.SupplierID) " + "WHERE UnitPrice <= $70"; ...
Der Connection String beinhaltet hier folgende Parameter: Die Art des Providers (Provider= SQLOLEDB), wo sich die Datenbank befindet (Data Source=(local);) - in unserem Fall auf einem "lokalen" Microsoft SQL Server, daher auf dem selben Computer wie der Webserver für die .aspx Seite - sowie die benötigten Zugangsinformationen (uid=sa; pwd=;). Damit das Skript zur Northwind Datenbank verbindet, ist der Parameter Initial Catalog=Northwind angegeben.
Anmerkung: Wenn Sie eine Verbindung zu einer Datenbank innerhalb einer ASP.NET Seite erstellen, können Sie aus zwei Providern wählen. Zur Verfügung stehen der OleDbConnection und der SqlConnection .NET Data Provider. Verwenden Sie den OleDbConnection Provider für beliebige Datenquellen wie MS Access 2000 oder andere gängige Datenbanken. Der SqlConnection Provider ist hochoptimiert und zur Kommunikation mit der MS SQL Server Datenbank gedacht. Der OleDbConnection Provider ist im System.Data.OleDb Namespace und der SqlConnection Provider im System.Data.SqlClient Namespace des .NET Frameworks vorhanden. Bei anderen Datenbanken ist der OleDbConnection Provider aus Performancegründen zu wählen.
Mit dem SQL Statement, welches in der Variable strSQL vom Datentyp string gespeichert ist, wollen wir alle Produkte der Northwind Datenbank auslesen, die maximal USD 70 kosten. Um detailliertere Informationen über die Produkte zu erhalten lassen wir uns noch zusätzlich die Lieferanten und den tatsächlichen Preis der Ware anzeigen.
Nachdem wir nun die System.Data und System.Data.OleDb Namespaces angegeben haben und die beiden erforderlichen Informationen - die Verbindungs-Parameter strConn sowie die SQL Abfrage strSQL - bereitgestellt sind, können wir nun zum Hauptteil schreiten:
Um eine Verbindung zu einer beliebigen Datenquelle mittles OleDbConnection Provider herzustellen, sind Statements wie die folgenden nötig:
... OleDbConnection MyNWConn = new OleDbConnection(strConn); MyNWConn.Open(); ...
Um eine performance-optimierte Verbindung zu einer SQL Server Datenbank herzustellen, kann man natürlich auch den SqlConnection Provider benutzen. Hierfür müssen wir die folgenden Statments angeben:
... SqlConnection MyNWConn = new SqlConnection("server=localhost;uid=sa;pwd=;database=Northwind"); MyNWConn.Open(); ...
In dem obigen Abschnitt des Beispiel-Sourcecodes erstellen wir eine neue Instanz der OleDbConnection. Ähnlich wie unter der "alten" ADO Technologie verwenden wir die Methode Open des OleDbConnection (bzw. SqlConnection) Objekts um die Verbindung zur Datenbank auch physikalisch herzustellen.
Nun sind wir soweit, daß wir die angeforderten Daten in das DataSet schreiben können.
Da ADO.NET mit disconnected Data Sets arbeitet, müssen wir ein neues DataSet Objekt erstellen (siehe auch Artikel Was ist neu in ADO.NET).
... DataSet MyDataSet = new DataSet(); OleDbDataAdapter oCommand = new OleDbDataAdapter(strSQL,MyNWConn); ...
Die hochoptimierte Version für eine SQL Server Datenbankversion würde dabei wie folgt aussehen:
... DataSet MyDataSet = new DataSet(); SqlDataAdapter oCommand = new SqlDataAdapter(strSQL,MyNWConn); ...
Das OleDbDataAdapter (bzw. SqlDataAdapter) Objekt sammelt die Informationen aus den Verbindungsdaten, die in der strConn Variable gespeichert sind; Und natürlich werden auch die dazugehörigen Abfrageparameter unseres SQL-Statments, die in der Variable strSQL gespeichert sind, an das oCommand Objekt übergeben.
Diese nun folgende Anweisung befüllt unser DataSet Objekt namens oDataSet:
... oCommand.Fill(MyDataSet,"Lieferanten"); ...
Die Beendigung der Verbindung bzw. die Resourcenfreigabe erfolgt wie gewohnt mittels Aufruf der Close Methode.
... MyNWConn.Close(); %>
Dieser Artikel zeigt natürlich nur einen sehr kleinen Ausschnitt von dem was ADO.NET bietet. Aber nichtdestotrotz erhalten Sie das Grundrüstzeug um eine Verbindung zu einer vom OleDbConnection Provider unterstützten Datenbank zu erstellen.
Sie haben gesehen welche .NET Namespaces anzugeben sind und wie man unter ADO.NET eine gültige Verbindung zu einer Datenbank angibt. Weil ADO.NET mit disconnected Data Sets arbeitet, d.h. einer im Speicher abgelegten Kopie eines Datenbankinhaltes einer oder mehrerer Datenbanken, müssen Sie zuerst das DataSet Objekt instanzieren um es danach mit der Fill Methode des OleDbDataAdapter Objektes zu befüllen.
Für hochoptimierte SQL Server Abfragen verwenden Sie statt der Objekte OleDbConnection und OleDbDataAdapter die auf den SQL Server zugeschnittenen Objekte SqlConnection und SqlDataAdapter.
Natürlich möchten Sie die erlangten bzw. gefilterten Informationen der Datenbank im Browser sichtbar machen. Wie dies in C# zu programmieren ist und worauf man achten muß, möchte ich Ihnen in einem der nächsten Artikel zum Thema ADO.NET zeigen.
This printed page brought to you by AlphaSierraPapa
Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20001102.zip
A Brief History of C#
http:/www.aspheute.com/artikel/20000713.htm
Crystal Reports mit DataSets befüllen - Teil 1
http:/www.aspheute.com/artikel/20030402.htm
Crystal Reports mit DataSets befüllen - Teil 2
http:/www.aspheute.com/artikel/20030403.htm
DataViews als DataTable persistieren
http:/www.aspheute.com/artikel/20040123.htm
Datenaufbereitung in ADO.NET
http:/www.aspheute.com/artikel/20001106.htm
Der ODBC .NET Data Provider
http:/www.aspheute.com/artikel/20020206.htm
Die ersten Schritte in Visual Basic .NET
http:/www.aspheute.com/artikel/20031128.htm
Einführung in Typed DataSets
http:/www.aspheute.com/artikel/20040622.htm
Einstellungssache - Applikationsdaten in web.config
http:/www.aspheute.com/artikel/20011122.htm
Einträge numerieren im DataGrid
http:/www.aspheute.com/artikel/20040317.htm
Formularbasierte Authentifizierung in fünf Minuten
http:/www.aspheute.com/artikel/20020705.htm
Index Server Abfragen per Web Service
http:/www.aspheute.com/artikel/20021107.htm
MS IE WebControls 101
http:/www.aspheute.com/artikel/20020801.htm
Stored Procedures 101 in ADO.NET
http:/www.aspheute.com/artikel/20010626.htm
Was ist neu in ADO.NET
http:/www.aspheute.com/artikel/20001031.htm
Was ist neu in ASP.NET
http:/www.aspheute.com/artikel/20000712.htm
Web.Config 101
http:/www.aspheute.com/artikel/20010802.htm
ADO+ Guides the Evolution of the Data Species
http://msdn.microsoft.com/library/default.asp?URL=/library/techart/adoplus.htm
Introducing ADO+
http://msdn.microsoft.com/vstudio/nextgen/technology/adoplus.asp
Introducing ADO+: Data Access Services for the Microsoft .NET Framework
http://msdn.microsoft.com/msdnmag/issues/1100/adoplus/adoplus.asp
MSDN Online .NET Information
http://msdn.microsoft.com/net/
©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.