1 softwareentwicklung mit.net teil 5 datenzugriff mit ado.net dr. ralph zeller
TRANSCRIPT
![Page 1: 1 Softwareentwicklung mit.NET Teil 5 Datenzugriff mit ADO.NET Dr. Ralph Zeller](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cb486/html5/thumbnails/1.jpg)
1
Softwareentwicklung mit .NETTeil 5
Datenzugriff mitADO.NET
Dr. Ralph Zeller
![Page 2: 1 Softwareentwicklung mit.NET Teil 5 Datenzugriff mit ADO.NET Dr. Ralph Zeller](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cb486/html5/thumbnails/2.jpg)
2
Was ist ADO.NET?
ADO.NET (ActiveX Data Objects .NET) sind Klassen die Datenzugriffsdienste im .NET Framework bereitstellen.
Microsoft .NET Framework
Common Language Runtime
Base Classes
Web Services User Interface
Data and XML
ADO.NET XML ... ...
![Page 3: 1 Softwareentwicklung mit.NET Teil 5 Datenzugriff mit ADO.NET Dr. Ralph Zeller](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cb486/html5/thumbnails/3.jpg)
3
Motivation Warum eine neue Schnittstelle für den
Datenzugriff?
• Web Applikationen benötigen andere Architektur
• Lose Kopplung zwischen Applikation und Daten
• XML entwickelt sich zum universellen Datenformat
Problem mit bestehenden APIs
• ADO, OLE DB und ODBC: wurden für enge Kopplung und dauerhafte Verbindung konzipiert
• Remote Data Services, RDS: für nichtverbundene (disconnectet) Verbindungen. Kein Zustands-management zwischen request/response
Relationales vs. hierarchisches Datenmodell
![Page 4: 1 Softwareentwicklung mit.NET Teil 5 Datenzugriff mit ADO.NET Dr. Ralph Zeller](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cb486/html5/thumbnails/4.jpg)
4
ADO.NET Objekt Modell
Explizite Unterscheidung zwischen connected und disconnected Objekt Modell
Managed Provider für connected Zugriff
DataSet bietet Funktionalität für disconnected Datenobjekte
![Page 5: 1 Softwareentwicklung mit.NET Teil 5 Datenzugriff mit ADO.NET Dr. Ralph Zeller](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cb486/html5/thumbnails/5.jpg)
5
Managed Provider Klassen, die den Zugriff auf Datenquellen
managen
• Connection: Herstellung einer Verbindung zur Datenquelle
• Command: Zum Ausführen der Befehle
• DataReader: Liefert die Ergebnisse einer Abfrage
• DataSetCommand: Verbindet das DataSet mit der Datenquelle
Es gibt zwei Managed Provider
• ADO: Jeder OLE Datenbank (OLE DB) Provider.Zugriff via System.Data.ADO Namespace
• SQL Server: SQL Server 2000, SQL Server 7, MSDEZugriff via System.Data.SQL Namespace
![Page 6: 1 Softwareentwicklung mit.NET Teil 5 Datenzugriff mit ADO.NET Dr. Ralph Zeller](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cb486/html5/thumbnails/6.jpg)
6
Connection Objekt
Repräsentiert eine Verbindung zu einer Datenquelle
Die Verbindung zur Datenquelle ändern (create, open, close)
Transaktionen handhaben (begin, commit, abort)
String conStr="Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=Provider.mdb";ADOConnection aConn = new ADOConnection(conStr);aConn.Open();// Queries mit der ADODataSetCommand Klasse ausführenaConn.Close();
String conStr="Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=Provider.mdb";ADOConnection aConn = new ADOConnection(conStr);aConn.Open();// Queries mit der ADODataSetCommand Klasse ausführenaConn.Close();
![Page 7: 1 Softwareentwicklung mit.NET Teil 5 Datenzugriff mit ADO.NET Dr. Ralph Zeller](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cb486/html5/thumbnails/7.jpg)
7
Command Objekt
ADOCommand cmd = new ADOCommand();// Command mit Connection und Query String verbindencmd.ActiveConnection = aConn;cmd.CommandText = "SELECT * FROM Kunden";
ADOCommand cmd = new ADOCommand();// Command mit Connection und Query String verbindencmd.ActiveConnection = aConn;cmd.CommandText = "SELECT * FROM Kunden";
Repräsentiert eine Abfrage (Query) einer Datenquelle
Interessante Properties:• ActiveConnection: Verbindung zur Datenquelle
• CommandText: Enthält Query String
• CommandType: Wie ist Command Text zu interpretieren (Text, stored procedure, table name)
• CommandTimeout: Sekunden bis zum Timeout
• RecordsAffected: Anzahl der betroffenen Datensätze
![Page 8: 1 Softwareentwicklung mit.NET Teil 5 Datenzugriff mit ADO.NET Dr. Ralph Zeller](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cb486/html5/thumbnails/8.jpg)
8
DataReader Objekt
Der DataReader bietet uns die Möglichkeit …• Einen Ergebnis-Datenstrom von einer Datenquelle
zu erhalten
Der Datenstrom kann nur in einer Richtung ausgelesen werden (forward-only, read-only) • Unterstützt jedoch weder Scrolling noch Updates
Datenzugriffsmethoden: • Mit Typ und Spaltenindex: myRow.GetString(0)
• Über Attributnamen: myRow[“Attribut”]
• Read: Bewegt den Reader zum nächsten Datensatz
![Page 9: 1 Softwareentwicklung mit.NET Teil 5 Datenzugriff mit ADO.NET Dr. Ralph Zeller](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cb486/html5/thumbnails/9.jpg)
9
DataReaderBeispiel 1: Internet Provider
![Page 10: 1 Softwareentwicklung mit.NET Teil 5 Datenzugriff mit ADO.NET Dr. Ralph Zeller](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cb486/html5/thumbnails/10.jpg)
10
DataSet Objekt Lokaler Cache für Daten
• Ähnlich einer relationalen Datenbank, die im Arbeitsspeicher liegt
• Sind disconnected von der Datenquelle(Connect, execute query, disconnect)
Universeller Datencontainer• Nicht nur zur Verwendung mit Datenbanken
Daten werden in XML geholt und zurückgeschrieben
![Page 11: 1 Softwareentwicklung mit.NET Teil 5 Datenzugriff mit ADO.NET Dr. Ralph Zeller](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cb486/html5/thumbnails/11.jpg)
11
DataSet
DataSet Tables
DataTable
Relations
DataRelation
DataRelation
DataRow(s)
DataColumn
Constraint(s)
DataTable
DataTable
DataSets enthalten Tabellen, Spalten, Relationen, Bedingungen, Zeilen
![Page 12: 1 Softwareentwicklung mit.NET Teil 5 Datenzugriff mit ADO.NET Dr. Ralph Zeller](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cb486/html5/thumbnails/12.jpg)
12
DataSetCommand
weiß, wie eine Tabelle aus der Datenbank geladen wird und schreibt Änderungen zurück• enthält zwei Methoden:
• FillDataSet(DataSet)
• Update(DataSet)
• Mapping zwischen Tabellen und Spalten
• Benutzer kann die voreingestellten Kommandos überschreiben (insert/update/delete)
• z. B. um Stored Procedures anzugeben
• Erlaubt es, ein DataSet aus mehreren Datenquellen zu füllen
![Page 13: 1 Softwareentwicklung mit.NET Teil 5 Datenzugriff mit ADO.NET Dr. Ralph Zeller](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cb486/html5/thumbnails/13.jpg)
13
DataSetBeispiel 2: AboModell ausgeben
![Page 14: 1 Softwareentwicklung mit.NET Teil 5 Datenzugriff mit ADO.NET Dr. Ralph Zeller](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cb486/html5/thumbnails/14.jpg)
14
DataTable
Kann auf eine physische Tabelle in der Datenquelle gemapped sein.
Kann durch DataRelations mit anderen DataTables verbunden sein
Interessante Properties:
• Columns
• Rows
• ParentRelation
• Constraints
• PrimaryKey
![Page 15: 1 Softwareentwicklung mit.NET Teil 5 Datenzugriff mit ADO.NET Dr. Ralph Zeller](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cb486/html5/thumbnails/15.jpg)
15
DataSet und DataTable
DataSet ds = new DataSet();
// Neues DataTable Objekt erzeugenDataTable dt= new DataTable( "Abomodell" );
// Spalten erzeugen und einfügenDataColumn dc = new DataColumn( "AboID", Int32 );dt.Columns.Add( dc );
dt.Columns.Add( "Name", String );dt.Columns.Add( "Grundgebuehr", Currency );dt.Columns.Add( "Zeitgebuehr", Currency );dt.Columns.Add( "FreiStd", Int32 );
// DataTable Objekt in DataSet einfügends.Tables.Add( dt );
DataSet ds = new DataSet();
// Neues DataTable Objekt erzeugenDataTable dt= new DataTable( "Abomodell" );
// Spalten erzeugen und einfügenDataColumn dc = new DataColumn( "AboID", Int32 );dt.Columns.Add( dc );
dt.Columns.Add( "Name", String );dt.Columns.Add( "Grundgebuehr", Currency );dt.Columns.Add( "Zeitgebuehr", Currency );dt.Columns.Add( "FreiStd", Int32 );
// DataTable Objekt in DataSet einfügends.Tables.Add( dt );
DataTable Objekt erzeugen und einfügen
![Page 16: 1 Softwareentwicklung mit.NET Teil 5 Datenzugriff mit ADO.NET Dr. Ralph Zeller](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cb486/html5/thumbnails/16.jpg)
16
DataRelation
Wird für logische Relationen verwendet
• Erzeugt Relation zwischen zwei (2) DataTable Objekten
• Benötigt ein DataColumn Objekt von jedem DataTable Objekt
• Der DataType beider DataColumns muss gleich sein
• Es kann keine Int32 DataColumn mit einem String DataColumn verbunden werden
• Die Relation bekommt einen Namen (von Dir!)
Macht relationale Navigation möglich
DataRelation dr = new DataRelation( “myRelation”,...)DataRelation dr = new DataRelation( “myRelation”,...)
![Page 17: 1 Softwareentwicklung mit.NET Teil 5 Datenzugriff mit ADO.NET Dr. Ralph Zeller](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cb486/html5/thumbnails/17.jpg)
17
DataSet und DataRelation
DataColumn parentCol, childCol;parentCol= DataSet.Tables["Kunden"].Columns["AboID"];childCol = DataSet.Tables["Abomodell"].Columns["AboID"];
// Erzeuge die DataRelation mit Namen "CustomerOrders"DataRelation dr; dr = New DataRelation("Kunden_Abomodell", parentCol, childCol); // DataRelation zu DataSet hinzufügen ds.Relations.Add( dr );
DataColumn parentCol, childCol;parentCol= DataSet.Tables["Kunden"].Columns["AboID"];childCol = DataSet.Tables["Abomodell"].Columns["AboID"];
// Erzeuge die DataRelation mit Namen "CustomerOrders"DataRelation dr; dr = New DataRelation("Kunden_Abomodell", parentCol, childCol); // DataRelation zu DataSet hinzufügen ds.Relations.Add( dr );
Wie wird eine DataRelation erzeugt:• Suche die zu verbindenden DataColumn
Objekte
• Erzeuge die DataRelation mit den Columns
• Füge die Relation in das DataSet ein
![Page 18: 1 Softwareentwicklung mit.NET Teil 5 Datenzugriff mit ADO.NET Dr. Ralph Zeller](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cb486/html5/thumbnails/18.jpg)
18
DataSet und XML DataSet bietet Methoden mit denen man XML
lesen und schreiben kann
• ReadXml: Liest XML Schema und Daten in ein DataSet
• ReadXmlData: Liest XML Daten in ein DataSet
• ReadXmlSchema: Liest XML Schema in ein DataSet
• Zum Schreiben: WriteXml, WriteXmlData, WriteXmlSchema
Schema kann als XSD geladen/gespeichert werden
Schema kann von XML Daten erzeugt werden (?!)
![Page 19: 1 Softwareentwicklung mit.NET Teil 5 Datenzugriff mit ADO.NET Dr. Ralph Zeller](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cb486/html5/thumbnails/19.jpg)
19
DataSet und XMLBeispiel 3: XML Dateien schreiben/lesen
![Page 20: 1 Softwareentwicklung mit.NET Teil 5 Datenzugriff mit ADO.NET Dr. Ralph Zeller](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cb486/html5/thumbnails/20.jpg)
20
ADO.NET und ASP.NET Datenbank Kommandos
• Transaktionen (Updates, Inserts, etc.)
• DataReader für den Zugriff auf Datenströme
• WebControls füllen, HTML Tabellen aufbauen DataSet
• Anwendungsdaten (Einkaufswagen)
• Ergebnisse cachen (häufige Abfrageergebnisse)
• Daten in einem WebRequest spiegeln XML
• Transformationen (XSL/T)
• Validierung (XSD, XDR, DTD)
• B2B Austausch (BizTalk)
• Erreichbarkeit einer großen Client Palette
![Page 21: 1 Softwareentwicklung mit.NET Teil 5 Datenzugriff mit ADO.NET Dr. Ralph Zeller](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cb486/html5/thumbnails/21.jpg)
21
Fragen?
Uff...