none
Datenbanken (LINQ und ADO.NET) RRS feed

  • Frage

  • Hi allerseits!

    Ich versuche mich nun endlich mal in die Datenbank-Programmierung mit VC# einzuarbeiten (wozu ich mir auch extra ein entsprechendes Buch der Microsoft Press gekauft habe), nur leider will es mir einfach nicht so richtig gelingen, die grundlegenden Begriffe diesbezüglich nachzuvollziehen: Einerseits gibt es da ja LINQ, was nach meiner Auffassung (für sich betrachtet) erst einmal eine reine Syntax darstellt (eben ähnlich SQL). Für eine Datenbank relevant wäre dann ja z. B. LINQ to DataBase bzw. to SQL. Was hat nun aber ADO.NET damit zu tun (ich kann die Begriffe LINQ und ADO.NET nicht wirklich auseinanderhalten)? ADO.NET existiert ja schon viel länger, als LINQ (sprich: Was war ADO.NET dann, bevor LINQ eingeführt wurde?) - und was ist es jetzt. Und dann gibt es ja auch noch das ADO.NET Entity Framework - was ist das nun wieder?

    Wenn mir das jemand mal auseinander-klamüsern könnte, wäre ich wirklich sehr dankbar!

    Grüße, Rainer

    Dienstag, 27. Januar 2015 12:03

Antworten

  • Hallo Rainer,

    ADO.NET ist der Oberbegriff für die Datenzugriffskomponenten, die das Framework bereit stellt. Damit verbindet man sich zu Datenbank (welche auch immer), kann SQL Statements ausführen lassen, oder Daten in DataTables laden usw., also der native Zugriff auf Datenbanken; siehe MSDN ADO.NET

    "Entity Framework (EF)" ist ein sogenannter OR Mapper, um Objekte aus der Programmierwelt auf relationale Datenbanken abzubilden; siehe http://de.wikipedia.org/wiki/Objektrelationale_Abbildung

    LinQ = Language Integrated Query kann man in der Tat als Syntax betrachten, intern steckt schon mehr dahinter. Und ja, es ist SQL sehr ähnlich, nur grammatikalisch richtig; in der Hinsicht hinkt SQL deutlich.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Dienstag, 27. Januar 2015 12:32
  • Hi Rainer,
    was Du Dir zusammengereimt hast, ist teilweise falsch.

    ADO.NET ist eine Basis-Technologie (eine Weiterentwicklung des klassischen ADO), bestehend aus Klassen und Methoden, die auch teilweise von den anderen Frameworks genutzt werden.

    ADO.NET enthält auch einen Puffermechanismus, realisiert durch die DataSet- und DataAdapter-Klassen.

    Linq ist eine in die Programmiersprache eingebettete Abfragesprache und hat erst einmal weder mit ADO.NET noch mit Datenbanken zu tun. Dort geht es abstrakt um Datenobjekte in Datenmengen.

    Für unterschiedliche Arten von Datenobjekten gibt es unterschiedliche Provider (als Klassen in dll's und Namensräumen), die Linq umsetzen (die Ausführung gewährleisten).

    Datenobjekte können sein: .NET-Objekte, was auch typisierte DataSets sind, XML-Objekte, externe Datenbanken.

    Linq to Objects und Linq to DataSet ist dasselbe, da es dabei um die Verwaltung von .NET-Objekten geht.

    Linq to SQL und Linq to Entities wurden anfänglich parallel entwickelt, wobei Linq to SQL nur für den SQL Server entwickelt wurde und Linq to Entities erweiterbar auch auf andere Datenbankserver konzipiert wurde. EDM basiert auf Linq to Entities und hat ein von ADO.NET abweichendes Puffersystem.

    --
    Peter

    Dienstag, 27. Januar 2015 15:31

Alle Antworten

  • Hallo Rainer,

    ADO.NET ist der Oberbegriff für die Datenzugriffskomponenten, die das Framework bereit stellt. Damit verbindet man sich zu Datenbank (welche auch immer), kann SQL Statements ausführen lassen, oder Daten in DataTables laden usw., also der native Zugriff auf Datenbanken; siehe MSDN ADO.NET

    "Entity Framework (EF)" ist ein sogenannter OR Mapper, um Objekte aus der Programmierwelt auf relationale Datenbanken abzubilden; siehe http://de.wikipedia.org/wiki/Objektrelationale_Abbildung

    LinQ = Language Integrated Query kann man in der Tat als Syntax betrachten, intern steckt schon mehr dahinter. Und ja, es ist SQL sehr ähnlich, nur grammatikalisch richtig; in der Hinsicht hinkt SQL deutlich.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Dienstag, 27. Januar 2015 12:32
  • Hi Rainer,
    das ADO.NET ist die Basistechnologie, die im ersten Teil dem klassischen ADO entspricht:

    Verbindung zur Datrenbank (Connection)
    Befehl an die Datenbank (Command)
    Parameter für die Befehle (Parameter)

    Hinzu kommt noch die Transaction.

    Bei der Ausführung unterschiedet sich ADO.NET vom klassischen ADO. Es gibt keine Recordsets mehr und auch keinen serverseitigen Cursor.

    Für die Befehlsausführung gibt es einige Exec-Anweisungen. Hinzu kommen komplexe Klassen (wie DataAdapter) und Methoden (Fill, Update), die Puffer im Client mit Daten laden und Änderungen zurückschreiben. Als Puffer bietet ADO.NET das DataSet, welches auch die Zustandsverfolgung der Datensätze beinhaltet. Diese Basistechnologie arbeitet im wesentlichen nicht typsicher.

    Der nächste Schritt ist das typisierte DataSet, ein Aufsatz auf die nicht typsicheren Bestandteile des DataSets usw.

    Linq ist eine in die Programmiersprache eingebettete Abfragesprache, die das Ziel hat, unabhängig vom Typ der Daten in einer Datenmenge, diese Datenmenge mit einfachen Mitteln zu verarbeiten und das alles möglichst typsicher.

    Zur Verwaltung der unterschiedlichen Typen von Daten in unterschiedlichen Typen von Datenmengen sind verschiedene Provider entwickelt worden, die mit LinQ genutzt werden können:

    Ling to Objects - .NET-Objekte und auch typisierte DataSets;
    Ling to XML - XML-Strukturen;
    Linq to SQL - SQL Server;
    Linq to EDM - Datenbank Server.

    Linq to SQL setzt die Abfragen in SQL Anweisungen um und lädt dann eigene Puffer (kein DataSet) mit entsprechender Zustandsverfolgung.

    EDM ist ein Entwurfsmuster mit zur Verwaltung von Datenobjekten und Datenmengen in eigenen Puffern (kein DataSet) mit entsprechender Zustandsverfolgung. Linq to EDM bietet ähnlich wie Linq to SQL die Umsetzung der Abfragen in SQL Anweisen bzw. SP's. Dabei werden aber eigene Basisobjekte ähnlich den ADO.NET Basisobjekten genutzt.

    Das war kurz ein kleiner Überblick.

    --
    Peter

    Dienstag, 27. Januar 2015 13:20
  • Danke für die Antworten. Also ich habe mir es jetzt wie folgt zusammengereimt:

    - ADO.NET ist mehr oder weniger erst einmal nur ein Begriff (welcher allgemein die Funktionalität von .NET beschreibt, mit Datenbanken zu kommunizieren);

    - LINQ to DataSet, LINQ to SQL und LINQ to Entities stellen die Implementierungen dar, welche eben für Vorgenanntes gedacht sind (sprich welche dementsprechend unter dem Begriff ADO.NET zusammengefasst werden können);

    - LINQ to DataSet beschreibt den Zugriff auf ein (ADO.NET) Dataset-Objekt, welches eine Abbildung der Datenbank im Arbeitsspeicher des Klienten darstellt;

    Wenn ich bis hierhin falsch liegen sollte, bitte ich um Korrektur. Nun würde ich gern noch etwas genauer verstehen, worin nun noch der Unterschied zu LINQ to SQL und LINQ to Entities besteht - auf was wird da zugegriffen (ja mutmaßlich nicht auf eine Spiegelung der Datenbank im Arbeitsspeicher, sonst würde es ja auch LINQ to DataSet heißen)? Danke erneut. Rainer

    Dienstag, 27. Januar 2015 14:09
  • Hi Rainer,
    was Du Dir zusammengereimt hast, ist teilweise falsch.

    ADO.NET ist eine Basis-Technologie (eine Weiterentwicklung des klassischen ADO), bestehend aus Klassen und Methoden, die auch teilweise von den anderen Frameworks genutzt werden.

    ADO.NET enthält auch einen Puffermechanismus, realisiert durch die DataSet- und DataAdapter-Klassen.

    Linq ist eine in die Programmiersprache eingebettete Abfragesprache und hat erst einmal weder mit ADO.NET noch mit Datenbanken zu tun. Dort geht es abstrakt um Datenobjekte in Datenmengen.

    Für unterschiedliche Arten von Datenobjekten gibt es unterschiedliche Provider (als Klassen in dll's und Namensräumen), die Linq umsetzen (die Ausführung gewährleisten).

    Datenobjekte können sein: .NET-Objekte, was auch typisierte DataSets sind, XML-Objekte, externe Datenbanken.

    Linq to Objects und Linq to DataSet ist dasselbe, da es dabei um die Verwaltung von .NET-Objekten geht.

    Linq to SQL und Linq to Entities wurden anfänglich parallel entwickelt, wobei Linq to SQL nur für den SQL Server entwickelt wurde und Linq to Entities erweiterbar auch auf andere Datenbankserver konzipiert wurde. EDM basiert auf Linq to Entities und hat ein von ADO.NET abweichendes Puffersystem.

    --
    Peter

    Dienstag, 27. Januar 2015 15:31