OLE DB ve ODBC veri kaynakları arasındaki fark nedir?


171

Pivotcache hakkında bir MS Excel yardım makalesi okuyordum ve OLE DB ve ODBC kaynakları ile ne anlama geldiğini merak ettim

... Şimdi öncelikle Microsoft Excel'in önceki sürümleriyle uyumluluk için var olan SQL özelliği yerine CommandText özelliğini kullanmalısınız. Her iki özelliği de kullanırsanız, CommandText özelliğinin değeri önceliklidir.

İçin , OLE DB kaynakları , CommandType özelliği CommandText özelliği değerini açıklar.

İçin ODBC kaynaklarından , CommandText özelliği tam olarak SQL özelliği gibi işlevleri ve özelliğini ayarlayarak verileri neden yenilenmesi ...

Kısa cevaplarınızı gerçekten takdir ediyorum.


2
Microsoft SQL Server 2012 ile Veri Ambarı Uygulama kitabına göre sadece bir yan not : "Microsoft yakın gelecekte bir noktada OLE DB bağlantıları desteğinin ODBC bağlantıları lehine kaldırılacağını duyurdu."
B. Burgdorf

2
6 Ekim 2017'den bu yana tarifsizdir. Bkz. Blogs.msdn.microsoft.com/sqlnativeclient/2017/10/06/…
Bogey Jammer

Yanıtlar:


147

Göre ADO: ActiveX Data Objects , 2001 O'Reilly Media tarafından yayınlanan Jason T. Roff bir kitabı, (burada mükemmel diyagram), o MOZILLA söyledi tam olarak ne diyor.

(doğrudan bu kitabın 7. sayfasından)

  • ODBC yalnızca ilişkisel veritabanlarına erişim sağlar
  • OLE DB aşağıdaki özellikleri sağlar
    • Biçimine veya konumuna bakılmaksızın verilere erişim
    • ODBC veri kaynaklarına ve ODBC sürücülerine tam erişim

Bu yüzden OLE DB SQL tabanlı veri kaynakları THRU ODBC sürücü katmanı ile etkileşim gibi görünüyor.

alternatif metin

Bu görüntünün doğru olduğundan% 100 emin değilim. Ben emin değilim iki bağlantı ADO C-api aracılığıyla ADO.NET ve SQL tabanlı veri kaynağına ODBC aracılığıyla OLE DB (çünkü bu diyagramda yazar OLE DB erişim ODBC aracılığıyla koymaz, inanıyorum bir hatadır).


7
OLE DB, SQL veri kaynaklarına bağlanmak için ODBC kullanıyorsa, OLE DB tarafından desteklenen herhangi bir SQL veri kaynağının ODBC tarafından desteklenmesi gerekir, ancak durum böyle değildir - orijinal diyagram doğru olmalıdır (ve bu değil) ).
Danny Varod

8
Aslında bazen OLE DB ODBC sürücüsünü sarar, bazen değil. Buraya bakınız
bobobobo

3
Bu giriş jamesmccaffrey.wordpress.com/2006/05/02/odbc-vs-ole-db , SQL DS için OLEDB'in ODBC üzerinden gittiğini söylüyor.
Hernán

1
@DannyVarod Ah, boş ver. " OLE DB tarafından desteklenen herhangi bir SQL veri kaynağı ..." kritik niteleyicisi kaçırdı . OLE DB RDBMS olmayan veri kaynaklarını desteklediğinden, OLE DB tarafından desteklenen filtrelenmemiş veri kaynakları kümesinin ODBC tarafından desteklenenlerin bir üst kümesi olması tamamen söz konusuydu.
Asad Saeeduddin

4
ADO.NET ADO'yu sarmaz. ADO.NET sınıfları genellikle başka bir sağlayıcı / sürücü katmanı aracılığıyla değil, doğrudan kendi veritabanı veya veritabanı ağ kitaplığıyla konuşur. Örneğin, System.Data.SqlClientyönetilen kodda TDS protokolünü işler, yalnızca ağ üzerinden TCP / Adlandırılmış Kanallar / vb iletimini işlemek için yerel kodu kullanır. Kendi yönetilen sağlayıcısı olmayan veritabanları System.Data.OleDbiçin OLE DB'yi veya ODBC'yi sarmak için kullanabilirsiniz System.Data.Odbc, ancak önerilmez.
Mike Dimmick

55

ODBC: - Yalnızca ilişkisel veritabanları için (Sql Server, Oracle vb.)

OLE DB: - Hem ilişkisel hem de ilişkisel olmayan veritabanları için. (Oracle, Sql-Server, Excel, ham dosyalar vb.)


4
Yanlış, her ikisi de sürücülere bağlı olarak ilişkisel olmayan mağazalarla konuşabilir.
Andy Dent

1
Hayır, ODBC ile yalnızca ilişkisel veritabanlarını değil, düz CSV Dosyalarını bile sorgulayabilirsiniz.
Wernfried Domscheit

Yanlış! Ayrıca metin dosyası ve XML ODBC sürücüsü de vardır.
Scott Chu

1
Bence bu doğru değil ... 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, 2009 ya da 2016 yılında siz ODBC hakkında konuşuyorsunuz ...? doğru oldu.
Yousha Aleayoub

42

İşte benim anlayışım (yetkili olmayan):

ODBC, çoğu yazılım satıcısı tarafından desteklenen teknolojiye duyarlı bir açık standarttır. OLEDB, COM dönemindeki teknolojiye özgü bir Microsoft API'sidir (COM, .NET'ten önceki bir bileşen ve birlikte çalışabilirlik teknolojisiydi)

Bir noktada, Microsoft veri tüketicileriyle uyumlu olmak isteyen çeşitli veri kaynağı satıcıları (ör. Oracle vb.), Ürünleri için OLEDB sağlayıcıları geliştirmiştir, ancak çoğunlukla OLEDB yalnızca Microsoft'a özgü bir standart olmaya devam etmektedir. Artık çoğu Microsoft veri kaynağı, temel olarak eski ODBC veri tüketicileriyle uyumluluk için ODBC ve OLEDB erişimine izin vermektedir. Ayrıca, ODBC için OLEDB sağlayıcısı (sarıcı) vardır, bu da istenirse ODBC veri kaynaklarına erişmek için OLEDB kullanılmasına izin verir.

Özellikleri açısından OLEDB ODBC'den büyük ölçüde daha zengindir, ancak bir halka-kural-hepsi-hepsi sendromundan muzdariptir (aşırı jenerik, aşırı karmaşık, görüşsüz).

Microsoft dışı dünyada ODBC tabanlı veri sağlayıcıları ve istemcileri yaygın olarak kullanılır ve hiçbir yere gitmez.

Microsoft bubble OLEDB içinde, o veri kaynağı için yerel taşıma katmanı ne olursa olsun (örneğin, MS SQL Server için TDS) üzerine inşa edilmiş yerel .NET API'leri lehine kullanımdan kaldırılıyor.


20

ODBC ve OLE DB rakip iki veri erişim teknolojisidir. Özellikle SQL Server ile ilgili olarak, Microsoft her ikisini de Tercih Edilen Gelecek Yönü olarak tanıtmıştır - farklı zamanlarda.

ODBC

ODBC, tablo benzeri verilere erişmek için endüstri çapında standart bir arabirimdir. Öncelikle veritabanları için geliştirildi ve her biri bir alan koleksiyonunda gruplanan kayıt koleksiyonlarında veri sunuyor. Her alanın içerdiği veri türüne uygun kendi veri türü vardır. Her veritabanı satıcısı (Microsoft, Oracle, Postgres,…) veritabanı için bir ODBC sürücüsü sağlar.

Ayrıca, veritabanı tabloları olmasa da, verilere aynı şekilde erişmenin faydalı olduğuna yeterince benzeyen nesneler için ODBC sürücüleri de vardır. Örnekler e-tablolar, CSV dosyaları ve sütun raporlarıdır.

OLE DB

OLE DB, verilere erişim için bir Microsoft teknolojisidir. ODBC'den farklı olarak, e-posta mesajları, web sayfaları, Word belgeleri ve dosya dizinleri gibi hem tablo benzeri hem de tablo benzeri olmayan verileri kapsar. Bununla birlikte, nesne yönelimli olmaktan ziyade prosedür yönelimlidir ve veri kaynaklarına erişimin geliştirilmesi için oldukça zor bir arayüz olarak kabul edilmektedir. Bunun üstesinden gelmek için ADO, OLE DB'nin üstünde nesne yönelimli bir katman olacak ve onunla daha basit ve daha yüksek düzeyde - yine de çok güçlü - bir çalışma yöntemi sağlayacak şekilde tasarlanmıştır. ADO'nun en büyük avantajı, belirli bir veri kaynağına özgü özellikleri, tüm veri kaynağı türlerine uygulanan özelliklere erişmek için kullanabildiğiniz gibi kolayca kullanabilmenizdir. Bazı tatmin edici olmayan en düşük ortak payda ile sınırlı değilsiniz.

Tüm veritabanlarının ODBC sürücüleri olsa da, hepsinin OLE DB sürücüleri yoktur. Bununla birlikte, OLE ve ODBC arasında, OLE DB benzeri bir şekilde erişmek istiyorsanız kullanılabilecek bir arabirim vardır. Bu arabirime MSDASQL (ODBC için Microsoft OLE DB sağlayıcısı) denir.

SQL Server Veri Erişim Teknolojileri

SQL Server, Microsoft tarafından yapılan (1), ve yana (2) Microsoft veritabanı platformu, ODBC ve OLE DB hem bunun için doğal bir uyum vardır.

ODBC

Diğer tüm veritabanı platformlarında ODBC arabirimleri bulunduğundan, Microsoft'un SQL Server için bir tane sağlamak zorunda olduğu açıktır. Buna ek olarak, Microsoft Access'teki orijinal varsayılan teknoloji olan DAO, tüm harici veri kaynaklarıyla standart konuşma yöntemi olarak ODBC'yi kullanır. Bu bir ODBC arabirimini olmazsa olmaz kıldı. SQL Server için sürüm 6 ODBC sürücüsü, SQL Server 2000 ile yayımlanan hala etrafında. Sonraki sürümlerle ortaya çıkan yeni veri türlerini, bağlantı teknolojilerini, şifrelemeyi, HA / DR vb. İşlemek için güncellenmiş sürümler yayınlanmıştır. 09/07/2018 itibariyle en son sürüm 23/03/2018 tarihinde yayınlanan v13.1 “SQL Server için ODBC Sürücüsü” dür.

OLE DB

Bu, Microsoft'un kendi teknolojisi olup, 2002-2005 yılları arasında beraberinde gelen ADO katmanıyla birlikte güçlü bir şekilde tanıtmaktadırlar. Belli ki bunun, tercih edilen veri erişim teknolojisi olacağını umuyorlardı. (Hatta ADO'yu Access 2002/2003'te verilere erişmek için varsayılan yöntem haline getirdiler.) Ancak, bunun, aşağıdakiler gibi bir dizi nedenden dolayı olmayacağı belli oldu:

  1. Dünya Microsoft teknolojilerine ve ODBC'den uzaklaşmayacaktı;
  2. DAO / ODBC, ADO / OLE DB'den daha hızlıydı ve MS Access'e iyice entegre edildi, bu yüzden doğal bir ölümle ölmeyecekti;
  3. Microsoft tarafından geliştirilen yeni teknolojiler, özellikle ADO.NET de doğrudan ODBC ile konuşabilir. ADO.NET doğrudan OLE DB ile de konuşabilir (böylece ADO'yu bir durgun su içinde bırakır), ancak (ADO'nun aksine) sadece ona bağlı değildi.

Bu nedenlerle ve diğer nedenlerle Microsoft, OLE DB'yi v11'den sonra SQL Server sürümleri için bir veri erişim teknolojisi olarak kullanımdan kaldırmıştır (SQL Server 2012). Bu noktadan birkaç yıl önce, hem ODBC hem de OLE DB teknolojilerini destekleyen SQL Server Yerel İstemcisi'ni üretiyor ve güncelliyorlardı. Ancak 2012'nin sonlarında, SQL Server'da yerel ilişkisel veri erişimi için ODBC ile hizalanacaklarını açıkladılar ve diğer herkesi de aynı şeyi yapmaya teşvik ettiler. Bunlar ayrıca v11 bundan sonra SQL Server bültenleri belirtilen / SQL Server 2012 aktif olur değil OLE DB destek!

Bu duyuru bir protesto fırtınasını kışkırttı. İnsanlar, MS'nin neden yıllarca uğraştıkları bir teknolojiyi anlamaya karar verdiklerini anlamakta kayıp oldular. Ayrıca, SQL Server'a yakından bağlı MS tarafından yazılmış uygulamalar olan SSAS / SSRS ve SSIS, tamamen veya kısmen OLE DB'ye bağımlıydı. Yine başka bir şikayet, OLE DB'nin ODBC'ye geri dönmek imkansız görünen bazı istenen özelliklere sahip olmasıydı - sonuçta, OLE DB'nin çok iyi noktaları vardı.

Ekim 2017'de Microsoft, OLE DB'yi serbest bıraktı ve resmi olarak kullanımdan kaldırdı . Yerel İstemci 11'in mevcut özellik kümesine sahip olacak ve ayrıca çok alt ağ yük devretme ve TLS 1.2 desteği sunacak yeni bir sürücünün (MSOLEDBSQL) yakında geleceğini duyurdular. Sürücü Mart 2018'de serbest bırakıldı.


@ChieltenBrinke Yayını, yayınımı içerecek şekilde güncellediğim bağlantılar ve en azından, kışkırttıkları yorumları gibi çeşitli kaynaklardan birlikte topladım. Diğer kaynaklar Jason Roff'un bobobobo tarafından bahsedilen ADO kitabı ve Litwin, Getz ve Gunderloy (gerçek eski, ama gerçek bir klasik) tarafından Access 2002 Masaüstü Geliştirici El Kitabı idi. Microsoft'ta herhangi bir iç izim yok, bu yüzden çeşitli yön değişikliklerinin arkasındaki düşünceye ilişkin spekülasyonlar, makul olsa da, tamamen benim.
marktwo

6

Çok temel bir düzeyde bunlar sadece farklı veri kaynakları (yani veritabanları) için farklı API'lerdir. OLE DB daha yeni ve tartışmasız daha iyi.

Wikipedia'da her ikisinde de daha fazla bilgi bulabilirsiniz:

  1. OLE DB
  2. ODBC

Yani aynı veritabanına bir ODBC sürücüsü veya OLE DB sürücüsü kullanarak bağlanabilirsiniz. Bu durumlarda veritabanı davranışındaki fark, kitabınızın ifade ettiği şeydir.


4
BT ile ilgili birçok konuda olduğu gibi, işler neredeyse tam bir dönüşüme kavuştu. SQL 2012, OLE DB Yerel sağlayıcısını destekleyen son sürümdü ve uygulamalar şimdi ODBC'ye geri dönmelidir. SQL Server'ın "eski günleri" gibi technet.microsoft.com/en-us/library/hh967418.aspx
Chris Wood

4
"OLE DB daha yeni ve tartışmasız daha iyi" Bu 2008'de doğru olabilir, ancak 2014'te olmayabilir.
Michael David Watson

@MichaelDavidWatson Peki ne söylerdin. ODBC veya OLEDB daha iyi kullanılsın mı? Mümkün olduğunca farklı SQL veritabanlarını desteklemem gerekiyor. Ve işaret ettiği gibi, OLE DB bir ODBC veri kaynağına da erişebilir. Öyleyse neden 2015'te "OLE DB daha yeni ve tartışmasız daha iyi" diyorsun? :)
LuckyLikey

@LuckyLikey MS, OLEDB'yi kullanımdan kaldırmıştır ve SQL Server artık desteklememektedir (SS 2012 bunu destekleyen sonuncuydu). msdn.microsoft.com/tr-tr/library/hh967418.aspx
Robino

5

Her ikisi de veri sağlayıcılarıdır (kodunuzun bir veri kaynağıyla konuşmak için kullanacağı API). 1998'de tanıtılan Oledb'in ODBC'nin yerini alması gerekiyordu (1992'de tanıtıldı)



3

Tüm ayrıntılardan emin değilim, ancak benim anlayışım, OLE DB ve ODBC, her bir uygulamaya özgü ayrıntılarla uğraşmak zorunda kalmadan çeşitli veritabanlarına bağlanmak için kullanılabilen iki API'dir. OLE DB hakkındaki Wikipedia makalesine göre , OLE DB Microsoft'un ODBC'nin ardılıdır ve ODBC ile veritabanı kaynakları olarak e-tablolara erişme gibi yapamayabileceğiniz bazı özellikler sağlar.


2

Microsoft web sitesinde, yerel OLEDB sağlayıcısının SQL sunucusuna doğrudan uygulandığını ve ODBC'nin Sysbase, DB2 vb. Gibi diğer Veritabanlarına erişmesi için OLEDB Sağlayıcısı adlı başka bir OLEDB sağlayıcısının OLEDB Sağlayıcısı altında farklı bileşen türleri olduğunu gösterir. Daha fazla bilgi için MSDN'de Dağıtılmış Sorgular konusuna bakın .


0

ODBC yalnızca ilişkisel veritabanları için çalışır, Ms Excel dosyaları gibi ilişkisel olmayan veritabanlarıyla çalışamaz. Olebd her şeyi yapabilir.


-3

M $'ın OLEDB'yi neden icat ettiğini bilmek için OLEDB'yi ODBC ile karşılaştıramazsınız. Bunun yerine OLEDB'yi DAO, RDO veya ADO ile karşılaştırmalısınız. İkincisi büyük ölçüde SQL'e dayanır. Ancak, OLEDB COM'a dayanmaktadır. Ancak ODBC zaten uzun yıllar var, bu yüzden bunu düzeltmek için bir OLEDB-ODBC köprüsü var. M $ OLEDB'i icat ettiğinde büyük bir resim olduğunu düşünüyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.