Was ist der Unterschied zwischen OLE DB- und ODBC-Datenquellen?

171

Ich habe einen MS Excel-Hilfeartikel über Pivotcache gelesen und mich gefragt, was sie unter OLE DB- und ODBC-Quellen verstehen

... Sie sollten die CommandText-Eigenschaft anstelle der SQL-Eigenschaft verwenden, die jetzt hauptsächlich aus Gründen der Kompatibilität mit früheren Versionen von Microsoft Excel vorhanden ist. Wenn Sie beide Eigenschaften verwenden, hat der Wert der CommandText-Eigenschaft Vorrang.

Für OLE DB-Quellen beschreibt die CommandType-Eigenschaft den Wert der CommandText-Eigenschaft.

Bei ODBC-Quellen funktioniert die CommandText-Eigenschaft genau wie die SQL-Eigenschaft. Durch Festlegen der Eigenschaft werden die Daten aktualisiert ...

Ich freue mich sehr über Ihre kurzen Antworten.

Martin08
quelle
2
Nur eine Randnotiz laut diesem Buch Implementieren eines Data Warehouse mit Microsoft SQL Server 2012 : "Microsoft hat angekündigt, dass in naher Zukunft die Unterstützung für OLE DB-Verbindungen zugunsten von ODBC-Verbindungen entfernt wird."
B. Burgdorf
2
Seit dem 6. Oktober 2017 ist es nicht mehr veraltet. Siehe blogs.msdn.microsoft.com/sqlnativeclient/2017/10/06/…
Bogey Jammer

Antworten:

147

Laut ADO: ActiveX Data Objects , einem Buch von Jason T. Roff, das 2001 von O'Reilly Media veröffentlicht wurde (ausgezeichnetes Diagramm hier), sagt er genau das, was MOZILLA gesagt hat.

(direkt von Seite 7 dieses Buches)

  • ODBC bietet nur Zugriff auf relationale Datenbanken
  • OLE DB bietet die folgenden Funktionen
    • Zugriff auf Daten unabhängig von Format oder Speicherort
    • Voller Zugriff auf ODBC-Datenquellen und ODBC-Treiber

Es scheint also, dass OLE DB über die ODBC-Treiberschicht mit SQL-basierten Datenquellen interagiert.

Alt-Text

Ich bin nicht 100% sicher, ob dieses Bild korrekt ist. Die beiden Verbindungen, bei denen ich mir nicht sicher bin, sind ADO.NET über ADO C-api und OLE DB über ODBC zu einer SQL-basierten Datenquelle (da der Autor in diesem Diagramm den Zugriff von OLE DB nicht über ODBC stellt, was ich glaube ist ein Fehler).

Bobobobo
quelle
7
Wenn OLE DB ODBC verwendet, um eine Verbindung zu SQL-Datenquellen herzustellen, muss jede von OLE DB unterstützte SQL-Datenquelle von ODBC unterstützt werden. Dies ist jedoch nicht der Fall - das ursprüngliche Diagramm muss korrekt gewesen sein (und nicht dieses ).
Danny Varod
8
Tatsächlich umschließt OLE DB manchmal den ODBC-Treiber, manchmal nicht. Siehe hier
Bobobobo
3
Dieser Eintrag jamesmccaffrey.wordpress.com/2006/05/02/odbc-vs-ole-db besagt, dass OLEDB für SQL DS ODBC durchläuft.
Hernán
1
@DannyVarod Ah, egal. Ich habe das kritische Qualifikationsmerkmal in "Jede SQL- Datenquelle, die von OLE DB unterstützt wird, würde ..." verpasst . Ich habe über die Tatsache gesprochen, dass OLE DB, da es Nicht-RDBMS-Datenquellen unterstützt, durchaus möglich ist, dass der von OLE DB unterstützte ungefilterte Satz von Datenquellen eine Obermenge der von ODBC unterstützten Datenquellen ist.
Asad Saeeduddin
4
ADO.NET umschließt ADO nicht. ADO.NET-Klassen kommunizieren im Allgemeinen direkt mit ihrer Datenbank oder Datenbanknetzwerkbibliothek, nicht über eine andere Anbieter- / Treiberschicht. Behandelt beispielsweise System.Data.SqlClientdas TDS-Protokoll in verwaltetem Code und verwendet nur nativen Code, um die TCP / Named Pipes / etc-Übertragung über das Netzwerk zu verarbeiten. Für Datenbanken, die keinen eigenen verwalteten Anbieter haben, können Sie System.Data.OleDbOLE DB oder System.Data.OdbcODBC umbrechen, dies wird jedoch nicht empfohlen.
Mike Dimmick
55

ODBC: - Nur für relationale Datenbanken (SQL Server, Oracle usw.)

OLE DB: - Für relationale und nicht relationale Datenbanken. (Oracle, SQL-Server, Excel, Rohdateien usw.)

MOZILLA
quelle
4
Falsch, beide können abhängig von den Treibern mit nicht relationalen Geschäften sprechen.
Andy Dent
1
Nein, mit ODBC können Sie auch flache CSV-Dateien abfragen, nicht nur relationale Datenbanken.
Wernfried Domscheit
Falsch! Es gibt auch Textdatei und XML-ODBC-Treiber.
Scott Chu
1
Ich denke, das ist nicht richtig ... Open Database Connectivity (ODBC) is Microsoft's strategic interface for accessing data in a heterogeneous environment of relational and non- relational database management systems. support.microsoft.com/en-us/kb/110093
uzay95
11
lol, ihr Jungs redet 2009 oder 2016 über ODBC ...? es war richtig.
Yousha Aleayoub
42

Hier ist mein Verständnis (nicht maßgebend):

ODBC ist ein technologieunabhängiger offener Standard, der von den meisten Softwareanbietern unterstützt wird. OLEDB ist eine technologie-spezifische Microsoft-API aus der COM-Ära (COM war vor .NET eine Komponenten- und Interoperabilitätstechnologie).

Irgendwann entwickelten verschiedene Anbieter von Datenquellen (z. B. Oracle usw.), die bereit waren, mit Microsoft-Datenkonsumenten kompatibel zu sein, OLEDB-Anbieter für ihre Produkte, aber zum größten Teil bleibt OLEDB ein reiner Microsoft-Standard. Jetzt erlauben die meisten Microsoft- Datenquellen sowohl den ODBC- als auch den OLEDB-Zugriff, hauptsächlich aus Gründen der Kompatibilität mit älteren ODBC-Datenkonsumenten. Es gibt auch einen OLEDB-Anbieter (Wrapper) für ODBC, mit dem man mit OLEDB auf ODBC-Datenquellen zugreifen kann, wenn man dies wünscht.

In Bezug auf die Merkmale ist OLEDB wesentlich reicher als ODBC, leidet jedoch an einem One-Ring-to-Rule-All-Syndrom (übermäßig generisch, überkompliziert, nicht meinungsbildend).

In der Welt außerhalb von Microsoft sind ODBC-basierte Datenanbieter und Clients weit verbreitet und gehen nirgendwo hin.

Innerhalb der Microsoft-Blase wird OLEDB zugunsten nativer .NET-APIs auslaufen, die auf der nativen Transportschicht für diese Datenquelle aufbauen (z. B. TDS für MS SQL Server).

zvolkov
quelle
20

ODBC und OLE DB sind zwei konkurrierende Datenzugriffstechnologien. Insbesondere in Bezug auf SQL Server hat Microsoft beide als bevorzugte zukünftige Richtung beworben - allerdings zu unterschiedlichen Zeiten.

ODBC

ODBC ist eine branchenweite Standardschnittstelle für den Zugriff auf tabellenähnliche Daten. Es wurde hauptsächlich für Datenbanken entwickelt und präsentiert Daten in Datensammlungen, von denen jede in einer Sammlung von Feldern zusammengefasst ist. Jedes Feld hat einen eigenen Datentyp, der dem darin enthaltenen Datentyp entspricht. Jeder Datenbankanbieter (Microsoft, Oracle, Postgres,…) stellt einen ODBC-Treiber für seine Datenbank bereit.

Es gibt auch ODBC-Treiber für Objekte, die zwar keine Datenbanktabellen sind, jedoch so ähnlich sind, dass der Zugriff auf Daten auf dieselbe Weise nützlich ist. Beispiele sind Tabellenkalkulationen, CSV-Dateien und Spaltenberichte.

OLE DB

OLE DB ist eine Microsoft-Technologie für den Zugriff auf Daten. Im Gegensatz zu ODBC umfasst es sowohl tabellenähnliche als auch nicht tabellenähnliche Daten wie E-Mail-Nachrichten, Webseiten, Word-Dokumente und Dateiverzeichnisse. Es ist jedoch eher prozedurorientiert als objektorientiert und wird als ziemlich schwierige Schnittstelle für die Entwicklung des Zugriffs auf Datenquellen angesehen. Um dies zu überwinden, wurde ADO als objektorientierte Schicht über OLE DB konzipiert und bietet eine einfachere und übergeordnete, wenn auch immer noch sehr leistungsfähige Möglichkeit, damit zu arbeiten. Der große Vorteil von ADO besteht darin, dass Sie damit Eigenschaften bearbeiten können, die für einen bestimmten Datenquellentyp spezifisch sind, genauso einfach wie Sie damit auf die Eigenschaften zugreifen können, die für alle Datenquellentypen gelten. Sie sind nicht auf einen unbefriedigenden kleinsten gemeinsamen Nenner beschränkt.

Während alle Datenbanken ODBC-Treiber haben, haben sie nicht alle OLE DB-Treiber. Es ist jedoch eine Schnittstelle zwischen OLE und ODBC verfügbar, die verwendet werden kann, wenn Sie auf OLE DB-ähnliche Weise darauf zugreifen möchten. Diese Schnittstelle heißt MSDASQL (Microsoft OLE DB-Anbieter für ODBC).

SQL Server-Datenzugriffstechnologien

Da SQL Server (1) von Microsoft und (2) von der Microsoft-Datenbankplattform hergestellt wird, sind sowohl ODBC als auch OLE DB eine natürliche Ergänzung dafür.

ODBC

Da alle anderen Datenbankplattformen ODBC-Schnittstellen hatten, musste Microsoft offensichtlich eine für SQL Server bereitstellen. Darüber hinaus verwendet DAO, die ursprüngliche Standardtechnologie in Microsoft Access, ODBC als Standardmethode für die Kommunikation mit allen externen Datenquellen. Dies machte eine ODBC-Schnittstelle zu einer unabdingbaren Voraussetzung. Der mit SQL Server 2000 veröffentlichte ODBC-Treiber der Version 6 für SQL Server ist noch verfügbar. Es wurden aktualisierte Versionen veröffentlicht, um die neuen Datentypen, Verbindungstechnologien, Verschlüsselung, HA / DR usw. zu verarbeiten, die in nachfolgenden Versionen erschienen sind. Ab dem 09.07.2008 ist die neueste Version v13.1 „ODBC-Treiber für SQL Server“, veröffentlicht am 23.03.2008.

OLE DB

Dies ist Microsofts eigene Technologie, die von etwa 2002 bis 2005 stark gefördert wurde, zusammen mit der dazugehörigen ADO-Schicht. Sie hofften offenbar, dass dies die Datenzugriffstechnologie der Wahl werden würde. (Sie haben ADO sogar zur Standardmethode für den Zugriff auf Daten in Access 2002/2003 gemacht.) Schließlich stellte sich jedoch heraus, dass dies aus einer Reihe von Gründen nicht geschehen würde, z.

  1. Die Welt würde nicht auf Microsoft-Technologien umsteigen und sich von ODBC entfernen.
  2. DAO / ODBC war schneller als ADO / OLE DB und wurde auch gründlich in MS Access integriert, sodass kein natürlicher Tod eintreten würde.
  3. Neue Technologien, die von Microsoft entwickelt wurden, insbesondere ADO.NET, konnten auch direkt mit ODBC kommunizieren. ADO.NET konnte auch direkt mit OLE DB kommunizieren (wodurch ADO im Hintergrund blieb), war jedoch (im Gegensatz zu ADO) nicht ausschließlich davon abhängig.

Aus diesen und anderen Gründen hat Microsoft OLE DB als Datenzugriffstechnologie für SQL Server-Versionen nach Version 11 (SQL Server 2012) tatsächlich abgelehnt . Vor diesem Zeitpunkt hatten sie einige Jahre lang den nativen SQL Server-Client erstellt und aktualisiert, der sowohl ODBC- als auch OLE DB-Technologien unterstützte. Ende 2012 kündigten sie jedoch an, dass sie sich für den nativen relationalen Datenzugriff in SQL Server an ODBC ausrichten würden, und ermutigten alle anderen, dasselbe zu tun. Sie gaben weiter an, dass SQL Server-Versionen nach v11 / SQL Server 2012 OLE DB nicht aktiv unterstützen würden !

Diese Ankündigung löste einen Sturm des Protests aus. Die Menschen waren nicht in der Lage zu verstehen, warum MS plötzlich eine Technologie ablehnte, für die sie sich jahrelang verpflichtet hatten. Darüber hinaus waren SSAS / SSRS und SSIS, bei denen es sich um MS-geschriebene Anwendungen handelte, die eng mit SQL Server verbunden waren, ganz oder teilweise von OLE DB abhängig. Eine weitere Beschwerde war, dass OLE DB bestimmte wünschenswerte Funktionen hatte, die unmöglich auf ODBC zurückportiert werden konnten - schließlich hatte OLE DB viele gute Punkte.

Im Oktober 2017 gab Microsoft die OLE DB nach und lehnte sie offiziell ab . Sie kündigten die bevorstehende Einführung eines neuen Treibers (MSOLEDBSQL) an, der über die vorhandenen Funktionen des Native Client 11 verfügt und außerdem ein Multi-Subnetz-Failover und TLS 1.2-Unterstützung einführt. Der Fahrer wurde im März 2018 freigelassen.

marktwo
quelle
@ChaltenBrinke Ich habe den Beitrag aus verschiedenen Quellen zusammengeschustert, z. B. aus den Links, die ich in meinem Beitrag aktualisiert habe, und nicht zuletzt aus den Kommentaren, die sie provoziert haben. Andere Quellen waren Jason Roffs von Bobobobo erwähntes Buch über ADO und The Access 2002 Desktop Developer's Handbook von Litwin, Getz und Gunderloy (wirklich alt, aber ein echter Klassiker). Ich habe bei Microsoft keinerlei Insider-Informationen, daher sind meine Spekulationen über das Denken hinter ihren verschiedenen Richtungsänderungen, obwohl plausibel, ganz meine eigenen.
März
6

Auf einer sehr einfachen Ebene sind dies nur verschiedene APIs für die verschiedenen Datenquellen (dh Datenbanken). OLE DB ist neuer und wohl besser.

Sie können mehr über beide in Wikipedia lesen:

  1. OLE DB
  2. ODBC

Das heißt, Sie können mit einem ODBC-Treiber oder OLE DB-Treiber eine Verbindung zu derselben Datenbank herstellen. Der Unterschied im Datenbankverhalten in diesen Fällen ist das, worauf sich Ihr Buch bezieht.

Ilya Kochetov
quelle
4
Wie bei vielen IT-Themen hat sich der Kreis fast geschlossen. SQL 2012 war die letzte Version, die den OLE DB Native-Anbieter unterstützte, und Anwendungen sollten jetzt auf ODBC zurücksetzen. wie die "alten Tage" von SQL Server technet.microsoft.com/en-us/library/hh967418.aspx
Chris Wood
4
"OLE DB ist neuer und wohl besser" Dies mag 2008 zutreffen, aber nicht 2014.
Michael David Watson
@ MichaelDavidWatson Also, was würdest du sagen? ODBC oder OLEDB besser nutzen? Ich muss so viele verschiedene SQL-Datenbanken wie möglich unterstützen. Wie bereits erwähnt, kann OLE DB auch auf eine ODBC-Datenquelle zugreifen. Warum ist "OLE DB ist neuer und wohl besser" im Jahr 2015 immer noch falsch? :)
LuckyLikey
@LuckyLikey MS hat OLEDB veraltet und SQL Server unterstützt es nicht mehr (SS 2012 hat es zuletzt unterstützt). msdn.microsoft.com/en-us/library/hh967418.aspx
Robino
5

Beide sind Datenanbieter (API, mit der Ihr Code mit einer Datenquelle kommuniziert). Oledb, das 1998 eingeführt wurde, sollte ein Ersatz für ODBC sein (eingeführt 1992).

Arcturus
quelle
3

Ich bin mir nicht aller Details sicher, aber ich verstehe, dass OLE DB und ODBC zwei APIs sind, die für die Verbindung mit verschiedenen Arten von Datenbanken verfügbar sind, ohne dass alle implementierungsspezifischen Details von jedem behandelt werden müssen. Laut dem Wikipedia-Artikel zu OLE DB ist OLE DB der Nachfolger von Microsoft für ODBC und bietet einige Funktionen, die Sie mit ODBC möglicherweise nicht ausführen können, z. B. den Zugriff auf Tabellenkalkulationen als Datenbankquellen.

user10340
quelle
2

Auf der Microsoft-Website wird angezeigt, dass der native OLEDB-Anbieter direkt auf den SQL Server angewendet wird und ein anderer OLEDB-Anbieter namens OLEDB-Anbieter für ODBC auf andere Datenbanken wie Sysbase, DB2 usw. zugreift. Unter OLEDB-Anbieter gibt es verschiedene Arten von Komponenten. Weitere Informationen finden Sie unter Verteilte Abfragen auf MSDN .

FebWind
quelle
0

ODBC funktioniert nur für relationale Datenbanken, nicht für nicht relationale Datenbanken wie MS Excel-Dateien. Wo Olebd alles kann.

Md Shahriar
quelle
-3

Um zu wissen, warum M $ OLEDB erfindet, können Sie OLEDB nicht mit ODBC vergleichen. Stattdessen sollten Sie OLEDB mit DAO, RDO oder ADO vergleichen. Letzteres basiert weitgehend auf SQL. OLEDB setzt jedoch auf COM. Aber ODBC ist schon viele Jahre da, also gibt es eine OLEDB-ODBC-Brücke, um dies zu beheben. Ich denke, es gibt ein großes Bild, wenn M $ OLEDB erfindet.

Scott Chu
quelle