<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=ADO.NET</id>
	<title>ADO.NET - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=ADO.NET"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=ADO.NET&amp;action=history"/>
	<updated>2026-05-18T21:19:03Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=ADO.NET&amp;diff=206551&amp;oldid=prev</id>
		<title>imported&gt;SchlurcherBot: Bot: http → https</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=ADO.NET&amp;diff=206551&amp;oldid=prev"/>
		<updated>2025-04-28T09:42:49Z</updated>

		<summary type="html">&lt;p&gt;Bot: http → https&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;ADO.NET&amp;#039;&amp;#039;&amp;#039; ist ein Teil der von [[Microsoft]] entwickelten [[.Net-Framework|.NET]]-Plattform. Es handelt sich um eine Sammlung von [[Klasse (Programmierung)|Klassen]], die den Zugriff auf [[relationale Datenbank]]en gewährleisten.&lt;br /&gt;
&lt;br /&gt;
ADO.NET gilt als Nachfolger der [[ActiveX Data Objects]] (ADO), hat aber nichts mit der ActiveX-Technologie zu tun. In der Tat ist es um zahlreiche Funktionen erweitert worden, so dass man von einer Neuentwicklung sprechen kann.&lt;br /&gt;
&lt;br /&gt;
== Aufgaben ==&lt;br /&gt;
&lt;br /&gt;
Aufgabe der Klassen (die sich im [[Namensraum]] &amp;#039;&amp;#039;System.Data&amp;#039;&amp;#039; befinden) ist die Datenbankanbindung und Datenhaltung im Arbeitsspeicher. Dazu existieren Klassen, die Verbindung zu einer Datenbank ([[Microsoft SQL Server]], [[Oracle (Datenbanksystem)|Oracle]] etc.) herstellen (sogenannte &amp;#039;&amp;#039;Connection&amp;#039;&amp;#039;-Klassen), Klassen, die Tabellen im Arbeitsspeicher repräsentieren, und es ermöglichen, mit ihnen zu arbeiten (sogenannte &amp;#039;&amp;#039;DataTables&amp;#039;&amp;#039;) und Klassen, die für gesamte Datenbanken im Arbeitsspeicher stehen (sogenannte &amp;#039;&amp;#039;DataSets&amp;#039;&amp;#039;).&lt;br /&gt;
&lt;br /&gt;
Andere Klassen regeln die Anbindung an eine Datenbank. Für die Anbindung an die physische Datenbank existieren sogenannte &amp;#039;&amp;#039;DataProvider&amp;#039;&amp;#039;. Die Datenbanken können auf [[Extensible Markup Language|XML]]-Format abgebildet werden, weshalb es Klassen zum direkten Zugriff auf XML im Namensraum &amp;#039;&amp;#039;System.Xml&amp;#039;&amp;#039; gibt.&lt;br /&gt;
&lt;br /&gt;
== Architektur von ADO.NET ==&lt;br /&gt;
&lt;br /&gt;
Das Hauptanliegen von ADO.NET besteht darin, die Datenbeschaffung von der Bereitstellung und Anzeige der Daten vollständig zu trennen. Um dieses Ziel zu erreichen, spaltet sich ADO.NET in die drei Hauptkomponenten &amp;#039;&amp;#039;DataSet&amp;#039;&amp;#039;, &amp;#039;&amp;#039;Datenprovider&amp;#039;&amp;#039; und die Klassen der &amp;#039;&amp;#039;Datenbindung&amp;#039;&amp;#039; auf. Letztere stellen allerdings keinen integralen Bestandteil von ADO.NET dar, stattdessen dienen sie der Anbindung der Steuerelemente an ein DataSet.&lt;br /&gt;
&lt;br /&gt;
=== Datenprovider ===&lt;br /&gt;
[[Datei:ADO.NET.svg|mini|Aufbau des ADO.Net Datenproviders]]&lt;br /&gt;
Der Datenprovider ist die Schnittstelle zu einer Datenbank. Er muss fachliche Informationen über die Datenbank besitzen, d.&amp;amp;nbsp;h., er muss die Datenbank kennen. Für unterschiedliche Datenbanken existieren individuelle Datenprovider. Im .NET Framework sind die Datenprovider [[Microsoft SQL Server]] und [[OLE DB]] standardmäßig enthalten. Auch für viele [[Open Source|Open-Source]]-Datenbanken, wie z.&amp;amp;nbsp;B. [[MySQL]], existieren .NET-Datenprovider.&lt;br /&gt;
&lt;br /&gt;
Die vier Kernkomponenten der .NET-Datenprovider sind:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Connection&amp;#039;&amp;#039;&amp;#039;: Stellt eine Verbindung her, die der Kommunikation mit einer Datenquelle dient. Seit .NET 2.0 ist es möglich, bei der Verbindung umfangreiche [[Metadaten]] zur Datenbank zu laden.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Command&amp;#039;&amp;#039;&amp;#039;: Führt Anweisungen, gespeicherte Prozeduren und Aktionsabfragen aus. Dazu gehören unter anderem &amp;#039;&amp;#039;SELECT&amp;#039;&amp;#039;-, &amp;#039;&amp;#039;UPDATE&amp;#039;&amp;#039;- oder &amp;#039;&amp;#039;DELETE&amp;#039;&amp;#039;-Kommandos.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;DataAdapter&amp;#039;&amp;#039;&amp;#039;: Der DataAdapter füllt ein DataSet mit Daten und gleicht Aktualisierungen mit der Datenquelle ab. Er fungiert als Brücke zwischen der Datenquelle und einem DataSet-Objekt.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;DataReader&amp;#039;&amp;#039;&amp;#039;: Es handelt sich um einen vorwärtsgerichteten Datensatzleser, der nur einen lesenden Zugriff auf die Daten gestattet. Eine Navigation durch die Datensätze ist dabei nicht möglich, da diese sequentiell abgearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
=== DataSet ===&lt;br /&gt;
[[Datei:ADO.NET DataSet.svg|mini|Aufbau eines ADO.NET Datensets]]&lt;br /&gt;
Ein DataSet repräsentiert die speicherresidente, [[relationale Datenbank]] in der eigentlichen Anwendung. Es handelt sich dabei um ein Speicherabbild der eigentlichen Datenbank. Ein DataSet wird immer dann eingesetzt, wenn Daten mehrmals benötigt und von der Anwendung geändert werden. In diesem Fall werden die Daten über den &amp;#039;&amp;#039;DataAdapter&amp;#039;&amp;#039; im DataSet gespeichert, wo sie der Anwendung zur weiteren Verwendung zur Verfügung stehen.&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Klassen des DataSet sind:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;DataSet&amp;#039;&amp;#039;&amp;#039;: Diese Klasse repräsentiert ein logisches [[Schema (Informatik)|Schema]]. Das Datenbankschema verwaltet Beziehungen zwischen den in der Klasse enthaltenen Tabellen und sorgt dafür, dass die Datenbank relational ist.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;DataTable&amp;#039;&amp;#039;&amp;#039;: Das DataTable-Objekt stellt eine [[Datenbanktabelle]] dar. Es handelt sich um einen [[Datenspeicher]] mit Datensätzen und Spalten.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;DataRow&amp;#039;&amp;#039;&amp;#039;: Die DataRow-Klasse repräsentiert einen konkreten Datensatz in einer DataTable. Eine DataRow-Instanz ist stets an ein DataTable-Objekt gebunden.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;DataView&amp;#039;&amp;#039;&amp;#039;: Dient zum Filtern (z.&amp;amp;nbsp;B. [[SQL|WHERE]]) und Sortieren (z.&amp;amp;nbsp;B. [[SQL|ORDER BY]]) von Daten in einer DataTable. Über eine DataView kann eine spezielle Sicht auf die Daten einer Tabelle angelegt werden.&lt;br /&gt;
&lt;br /&gt;
== Einschränkungen ==&lt;br /&gt;
&lt;br /&gt;
In ADO.NET 1.x konnte zu bestimmten Zeitpunkten pro Verbindung nur ein Datenbankbefehl aktiv sein, beispielsweise ein &amp;#039;&amp;#039;DataReader&amp;#039;&amp;#039; lesend auf die Datenbank zugreifen. Versuche eines parallelen Zugriffs waren nicht möglich und führten zu Fehlermeldungen. Diese Architektur kann als Single Active Result Sets (SARS) bezeichnet werden.&lt;br /&gt;
&lt;br /&gt;
ADO.NET 2.0 unterstützt hingegen Multiple Active Result Sets (MARS), also die Mehrfachverwendung einer Verbindung. MARS ist für den [[Microsoft SQL Server]] 2005 und 2008 verfügbar und dort im Standard deaktiviert.&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
; Konfiguration der app.config bzw. web.config&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;configuration&amp;gt;&lt;br /&gt;
   &amp;lt;!-- Connection String für Verbindung zur Datenbank --&amp;gt;&lt;br /&gt;
   &amp;lt;connectionStrings&amp;gt;&lt;br /&gt;
      &amp;lt;add name=&amp;quot;MyConnectionString&amp;quot;&lt;br /&gt;
           providerName=&amp;quot;System.Data.SqlClient&amp;quot;&lt;br /&gt;
           connectionString=&amp;quot;Data Source=(localdb)\v11; InitialCatalog=MyDatabaseName&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;/connectionStrings&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;!-- Datenbank-Provider Factory --&amp;gt;&lt;br /&gt;
   &amp;lt;!-- (meist in machine.config konfiguriert) --&amp;gt;&lt;br /&gt;
   &amp;lt;system.data&amp;gt;&lt;br /&gt;
      &amp;lt;DbProviderFactories&amp;gt;&lt;br /&gt;
         &amp;lt;add name=&amp;quot;SqlClient Data Provider&amp;quot;&lt;br /&gt;
              invariant=&amp;quot;System.Data.SqlClient&amp;quot;&lt;br /&gt;
              description=&amp;quot;.NET Framework Data Provider for SQL Server&amp;quot;&lt;br /&gt;
              type=&amp;quot;System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&amp;quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/DbProviderFactories&amp;gt;&lt;br /&gt;
   &amp;lt;/system.data&amp;gt;&lt;br /&gt;
&amp;lt;/configuration&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Herstellen einer Datenbankverbindung&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
var settings = ConfigurationManager.ConnectionStrings[&amp;quot;MyConnectionString&amp;quot;];&lt;br /&gt;
var factory = DbProviderFactories.GetFactory(settings.ProviderName);&lt;br /&gt;
&lt;br /&gt;
using (var connection = factory.CreateConnection())&lt;br /&gt;
{&lt;br /&gt;
    if (connection == null) throw new Exception(&amp;quot;Could not create a connection.&amp;quot;);&lt;br /&gt;
    connection.ConnectionString = settings.ConnectionString;&lt;br /&gt;
&lt;br /&gt;
    // use DbParameters to prevent SQL Injections&lt;br /&gt;
    var age = factory.CreateParameter();&lt;br /&gt;
    if (age == null) throw new Exception(&amp;quot;Could not create parameter.&amp;quot;);&lt;br /&gt;
    age.ParameterName = &amp;quot;@age&amp;quot;;&lt;br /&gt;
    age.Value = 25;&lt;br /&gt;
&lt;br /&gt;
    // get a DbCommand with factory method&lt;br /&gt;
    var command = connection.CreateCommand();&lt;br /&gt;
    command.CommandText = &amp;quot;SELECT * FROM dbo.People WHERE Age &amp;gt; @age&amp;quot;;&lt;br /&gt;
    command.CommandType = CommandType.Text;&lt;br /&gt;
    command.Parameters.Add(age);&lt;br /&gt;
&lt;br /&gt;
    // open connection to database&lt;br /&gt;
    await connection.OpenAsync();&lt;br /&gt;
&lt;br /&gt;
    // Variant 1: read query results&lt;br /&gt;
    var dataReader = await command.ExecuteReaderAsync();&lt;br /&gt;
    while (await dataReader.ReadAsync())&lt;br /&gt;
    {&lt;br /&gt;
        Console.WriteLine(&amp;quot;Id: &amp;#039;{0}&amp;#039;, FirstName: &amp;#039;{1}&amp;#039;, MiddleName: &amp;#039;{2}&amp;#039;, LastName: &amp;#039;{3}&amp;#039;&amp;quot;,&lt;br /&gt;
            dataReader[&amp;quot;id&amp;quot;], dataReader[&amp;quot;firstname&amp;quot;], dataReader[&amp;quot;middlename&amp;quot;], dataReader[&amp;quot;lastname&amp;quot;]);&lt;br /&gt;
    }&lt;br /&gt;
    dataReader.Close();&lt;br /&gt;
&lt;br /&gt;
    // Variant 2: use a data adapter to fill a data table&lt;br /&gt;
    using (var dataAdapter = factory.CreateDataAdapter())&lt;br /&gt;
    {&lt;br /&gt;
        if (dataAdapter == null) throw new Exception(&amp;quot;Could not create a data adapter.&amp;quot;);&lt;br /&gt;
        dataAdapter.SelectCommand = command;&lt;br /&gt;
&lt;br /&gt;
        var dataTable = new DataTable();&lt;br /&gt;
        dataAdapter.FillSchema(dataTable, SchemaType.Source); // get table schema&lt;br /&gt;
        dataAdapter.Fill(dataTable); // get data&lt;br /&gt;
&lt;br /&gt;
        using (var dataTableReader = new DataTableReader(dataTable))&lt;br /&gt;
        {&lt;br /&gt;
            while (await dataTableReader.ReadAsync())&lt;br /&gt;
            {&lt;br /&gt;
                Console.WriteLine(&amp;quot;Id: &amp;#039;{0}&amp;#039;, FirstName: &amp;#039;{1}&amp;#039;, MiddleName: &amp;#039;{2}&amp;#039;, LastName: &amp;#039;{3}&amp;#039;&amp;quot;,&lt;br /&gt;
                    dataTableReader[&amp;quot;id&amp;quot;], dataTableReader[&amp;quot;firstname&amp;quot;], dataTableReader[&amp;quot;middlename&amp;quot;], dataTableReader[&amp;quot;lastname&amp;quot;]);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Entity Framework]]&lt;br /&gt;
* [[Fabrikmethode]]&lt;br /&gt;
* [[Repository (Entwurfsmuster)]]&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* {{Literatur|Autor=Andrew Troelsen|Titel=Pro C# 5.0 and the .Net 4.5 Framework|Verlag=Springer|Datum=2012|ISBN=978-1-4302-4233-8|Seiten=1560|Sprache=en}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [https://msdn.microsoft.com/de-de/library/e80y5yhx(VS.80).aspx .NET Framework-Entwicklerhandbuch ADO.NET (Visual Studio 2005)] im [[MSDN]]&lt;br /&gt;
* [https://msdn.microsoft.com/de-de/library/e80y5yhx.aspx .NET Framework-Entwicklerhandbuch ADO.NET (Visual Studio 2008)] im [[MSDN]]&lt;br /&gt;
* [https://msdn.microsoft.com/de-de/magazine/cc748663.aspx Daten 2.0: Verfügbarmachen und Nutzen von Daten in einer Welt der Webdienste] im [[MSDN]]-Magazine&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:.NET]]&lt;br /&gt;
[[Kategorie:Datenbankschnittstelle]]&lt;/div&gt;</summary>
		<author><name>imported&gt;SchlurcherBot</name></author>
	</entry>
</feed>