apa perbedaan antara sumber data OLE DB dan ODBC?

171

Saya membaca artikel bantuan MS Excel tentang pivotcache dan bertanya-tanya apa yang mereka maksud dengan sumber OLE DB dan ODBC

... Anda harus menggunakan properti CommandText alih-alih properti SQL, yang sekarang ada terutama untuk kompatibilitas dengan versi Microsoft Excel yang lebih lama. Jika Anda menggunakan kedua properti, nilai properti CommandText diutamakan.

Untuk sumber OLE DB , properti CommandType menjelaskan nilai properti CommandText.

Untuk sumber ODBC , properti CommandText berfungsi persis seperti properti SQL, dan pengaturan properti menyebabkan data menjadi segar ...

Saya sangat menghargai jawaban singkat Anda.

Martin08
sumber
2
Hanya catatan tambahan, menurut buku ini Menerapkan Gudang Data dengan Microsoft SQL Server 2012 : "Microsoft telah mengumumkan bahwa di beberapa titik dalam waktu dekat, dukungan untuk koneksi OLE DB akan dihapus dalam mendukung koneksi ODBC."
B. Burgdorf
2
Sejak 6 Oktober 2017, itu tidak pantas. Lihat blogs.msdn.microsoft.com/sqlnativeclient/2017/10/06/…
Bogey Jammer

Jawaban:

147

Menurut ADO: ActiveX Data Objects , sebuah buku karya Jason T. Roff, yang diterbitkan oleh O'Reilly Media pada tahun 2001 (diagram yang sangat baik di sini), ia mengatakan dengan tepat apa yang dikatakan MOZILLA.

(langsung dari halaman 7 buku itu)

  • ODBC hanya menyediakan akses ke basis data relasional
  • OLE DB menyediakan fitur berikut
    • Akses ke data terlepas dari format atau lokasinya
    • Akses penuh ke sumber data ODBC dan driver ODBC

Jadi tampaknya OLE DB berinteraksi dengan sumber data berbasis SQL melalui lapisan driver ODBC.

teks alternatif

Saya tidak 100% yakin gambar ini benar. Dua koneksi yang saya tidak yakin tentang adalah ADO.NET melalui ADO C-api, dan OLE DB melalui ODBC ke sumber data berbasis SQL (karena dalam diagram ini penulis tidak menempatkan akses OLE DB melalui ODBC, yang saya percaya adalah sebuah kesalahan).

bobobobo
sumber
7
Jika OLE DB menggunakan ODBC untuk terhubung ke sumber data SQL, maka setiap sumber data SQL yang didukung oleh OLE DB harus didukung oleh ODBC, namun ini bukan masalahnya - diagram aslinya harus benar (dan bukan yang ini ).
Danny Varod
8
Sebenarnya terkadang OLE DB membungkus driver ODBC, terkadang tidak. Lihat di sini
bobobobo
3
Entri ini jamesmccaffrey.wordpress.com/2006/05/02/odbc-vs-ole-db mengatakan bahwa untuk SQL DS, OLEDB berjalan melalui ODBC.
Hernán
1
@DannyVarod Ah, sudahlah. Saya melewatkan kualifikasi kritis dalam " sumber data SQL apa pun yang didukung oleh OLE DB akan ...". Saya berbicara tentang fakta bahwa karena OLE DB mendukung sumber data non-RDBMS, sangat mungkin untuk rangkaian sumber data tanpa filter yang didukung oleh OLE DB untuk menjadi superset dari yang didukung oleh ODBC.
Asad Saeeduddin
4
ADO.NET tidak membungkus ADO. Kelas ADO.NET umumnya berbicara langsung ke pangkalan data atau pustaka jaringan basis data mereka, bukan melalui penyedia / lapisan driver lainnya. Misalnya, System.Data.SqlClientmenangani protokol TDS dalam kode terkelola, hanya menggunakan kode asli untuk menangani transmisi TCP / Named Pipes / etc melalui jaringan. Untuk database yang tidak memiliki penyedia terkelola sendiri, Anda bisa menggunakan System.Data.OleDbuntuk membungkus OLE DB atau System.Data.Odbcuntuk membungkus ODBC, tetapi tidak disarankan.
Mike Dimmick
55

ODBC: - Hanya untuk database relasional (Sql Server, Oracle dll)

OLE DB: - Untuk basis data relasional dan non-relasional. (Oracle, Sql-Server, Excel, file mentah, dll)

MOZILLA
sumber
4
Salah, keduanya dapat berbicara dengan toko non-relasional tergantung pada driver.
Andy Dent
1
Tidak, dengan ODBC Anda dapat meminta bahkan CSV-Files datar, tidak hanya database relasional.
Wernfried Domscheit
Salah! Ada juga file teks dan driver XML ODBC.
Scott Chu
1
Saya pikir ini tidak benar ... 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
haha, kalian berbicara tentang ODBC di tahun 2009 atau 2016 ...? itu benar.
Yousha Aleayoub
42

Inilah pemahaman saya (non-otoritatif):

ODBC adalah standar terbuka teknologi-agnostik yang didukung oleh sebagian besar vendor perangkat lunak. OLEDB adalah API Microsoft khusus teknologi dari era COM (COM adalah komponen dan teknologi interoperabilitas sebelum .NET)

Di beberapa titik, berbagai vendor data vendor (misalnya Oracle, dll.), Yang bersedia kompatibel dengan konsumen data Microsoft, mengembangkan penyedia OLEDB untuk produk mereka, tetapi sebagian besar OLEDB tetap menjadi standar khusus Microsoft. Sekarang, sebagian besar sumber data Microsoft memungkinkan akses ODBC dan OLEDB, terutama untuk kompatibilitas dengan konsumen data ODBC lama. Juga, ada penyedia OLEDB (pembungkus) untuk ODBC yang memungkinkan seseorang untuk menggunakan OLEDB untuk mengakses sumber data ODBC jika diinginkan.

Dalam hal fitur OLEDB secara substansial lebih kaya daripada ODBC tetapi menderita sindrom satu-cincin-ke-aturan-mereka-semua (terlalu umum, terlalu rumit, tidak berpendapat).

Di dunia non-Microsoft, penyedia dan klien data berbasis ODBC banyak digunakan dan tidak akan ke mana-mana.

Di dalam Microsoft bubble OLEDB dihapus secara bertahap untuk mendukung .NET API asli dibangun di atas apa pun lapisan transport asli untuk sumber data tersebut (misalnya TDS untuk MS SQL Server).

zvolkov
sumber
20

ODBC dan OLE DB adalah dua teknologi akses data yang bersaing. Khusus mengenai SQL Server, Microsoft telah mempromosikan keduanya sebagai Arah Pilihan Masa Depan mereka - meskipun pada waktu yang berbeda.

ODBC

ODBC adalah antarmuka standar industri untuk mengakses data seperti tabel. Ini terutama dikembangkan untuk database dan menyajikan data dalam koleksi catatan, yang masing-masing dikelompokkan ke dalam kumpulan bidang. Setiap bidang memiliki tipe data sendiri yang cocok dengan jenis data yang dikandungnya. Setiap vendor basis data (Microsoft, Oracle, Postgres, ...) memasok driver ODBC untuk basis data mereka.

Ada juga driver ODBC untuk objek yang, meskipun mereka bukan tabel database, cukup mirip bahwa mengakses data dengan cara yang sama berguna. Contohnya adalah spreadsheet, file CSV, dan laporan kolom.

OLE DB

OLE DB adalah teknologi Microsoft untuk akses ke data. Tidak seperti ODBC, ia mencakup data seperti tabel dan non-tabel seperti pesan email, halaman web, dokumen Word, dan direktori file. Namun, ini lebih berorientasi pada prosedur daripada berorientasi objek dan dianggap sebagai antarmuka yang agak sulit untuk mengembangkan akses ke sumber data. Untuk mengatasinya, ADO dirancang untuk menjadi lapisan berorientasi objek di atas OLE DB dan untuk memberikan cara yang lebih sederhana dan tingkat yang lebih tinggi - meskipun masih sangat kuat - untuk bekerja dengannya. Keuntungan besar ADO adalah Anda dapat menggunakannya untuk memanipulasi properti yang spesifik untuk jenis sumber data tertentu, semudah Anda menggunakannya untuk mengakses properti yang berlaku untuk semua jenis sumber data. Anda tidak terbatas pada beberapa penyebut umum terendah yang tidak memuaskan.

Sementara semua database memiliki driver ODBC, mereka tidak semua memiliki driver OLE DB. Namun ada antarmuka yang tersedia antara OLE dan ODBC yang dapat digunakan jika Anda ingin mengaksesnya dengan cara seperti OLE DB. Antarmuka ini disebut MSDASQL (Microsoft OLE DB provider untuk ODBC).

Teknologi Akses Data SQL Server

Sejak SQL Server adalah (1) yang dibuat oleh Microsoft, dan (2) yang platform database Microsoft, baik ODBC dan OLE DB adalah cocok alami untuk itu.

ODBC

Karena semua platform database lain memiliki antarmuka ODBC, Microsoft jelas harus menyediakan satu untuk SQL Server. Selain itu, DAO, teknologi default asli di Microsoft Access, menggunakan ODBC sebagai cara standar untuk berbicara dengan semua sumber data eksternal. Ini membuat antarmuka ODBC menjadi sine qua non. Pengandar ODBC versi 6 untuk SQL Server, dirilis dengan SQL Server 2000, masih ada. Versi terbaru telah dirilis untuk menangani tipe data baru, teknologi koneksi, enkripsi, HA / DR dll. Yang telah muncul dengan rilis berikutnya. Pada 09/07/2018 rilis terbaru adalah v13.1 "ODBC Driver untuk SQL Server", dirilis pada 23/03/2018.

OLE DB

Ini adalah teknologi Microsoft sendiri, yang mereka promosikan dengan kuat dari sekitar tahun 2002 - 2005, bersama dengan lapisan ADO yang menyertainya. Mereka jelas berharap bahwa itu akan menjadi teknologi akses data pilihan. (Mereka bahkan menjadikan ADO metode default untuk mengakses data di Access 2002/2003.) Namun, akhirnya menjadi jelas bahwa ini tidak akan terjadi karena sejumlah alasan, seperti:

  1. Dunia tidak akan mengkonversi ke teknologi Microsoft dan jauh dari ODBC;
  2. DAO / ODBC lebih cepat dari ADO / OLE DB dan juga diintegrasikan sepenuhnya ke dalam MS Access, jadi tidak akan mati secara alami;
  3. Teknologi baru yang sedang dikembangkan oleh Microsoft, khususnya ADO.NET, juga dapat berbicara langsung dengan ODBC. ADO.NET dapat berbicara langsung dengan OLE DB juga (sehingga meninggalkan ADO di daerah terpencil), tetapi tidak (tidak seperti ADO) semata-mata bergantung padanya.

Untuk alasan ini dan lainnya , Microsoft sebenarnya tidak lagi menggunakan OLE DB sebagai teknologi akses data untuk rilis SQL Server setelah v11 (SQL Server 2012). Selama beberapa tahun sebelum titik ini, mereka telah memproduksi dan memperbarui SQL Server Native Client, yang mendukung teknologi ODBC dan OLE DB. Namun pada akhir 2012, mereka mengumumkan bahwa mereka akan menyelaraskan dengan ODBC untuk akses data relasional asli dalam SQL Server, dan mendorong semua orang untuk melakukan hal yang sama. Mereka lebih lanjut menyatakan bahwa rilis SQL Server setelah v11 / SQL Server 2012 akan secara aktif tidak mendukung OLE DB!

Pengumuman ini memicu badai protes. Orang-orang bingung untuk memahami mengapa MS tiba-tiba mencela teknologi yang telah mereka habiskan bertahun-tahun untuk membuat mereka berkomitmen. Selain itu, SSAS / SSRS dan SSIS, yang merupakan aplikasi yang ditulis MS yang terkait erat dengan SQL Server, seluruhnya atau sebagian bergantung pada OLE DB. Namun keluhan lain adalah bahwa OLE DB memiliki fitur yang diinginkan tertentu yang tampaknya tidak mungkin untuk kembali ke ODBC - lagipula, OLE DB memiliki banyak poin bagus.

Pada bulan Oktober 2017, Microsoft mengalah dan secara resmi membatalkan OLE DB . Mereka mengumumkan kedatangan driver baru (MSOLEDBSQL) dalam waktu dekat yang akan memiliki set fitur yang ada dari Native Client 11 dan juga akan memperkenalkan multi-subnet failover dan dukungan TLS 1.2. Sopir itu dirilis pada Maret 2018.

tandai dua
sumber
@ChieltenBrinke Saya membuat posting bersama dari beberapa sumber, seperti tautan yang telah saya perbarui untuk memasukkan dan, tidak terkecuali, komentar mereka. Sumber lain adalah buku Jason Roff tentang ADO yang disebutkan oleh bobobobo, dan The Access 2002 Desktop Developer's Handbook, oleh Litwin, Getz dan Gunderloy (benar-benar kuno, tetapi klasik nyata). Saya tidak memiliki jejak dalam di Microsoft, jadi spekulasi saya mengenai pemikiran di balik berbagai perubahan arah, meskipun masuk akal, sepenuhnya milik saya.
marktwo
6

Pada tingkat yang sangat mendasar, itu hanyalah API yang berbeda untuk sumber data yang berbeda (yaitu basis data). OLE DB lebih baru dan bisa dibilang lebih baik.

Anda dapat membaca lebih lanjut tentang keduanya di Wikipedia:

  1. OLE DB
  2. ODBC

Yaitu Anda bisa terhubung ke database yang sama menggunakan driver ODBC atau driver OLE DB. Perbedaan dalam perilaku basis data dalam kasus-kasus tersebut adalah apa yang dirujuk oleh buku Anda.

Ilya Kochetov
sumber
4
Seperti halnya banyak mata pelajaran terkait TI, banyak hal yang hampir sepenuhnya muncul. SQL 2012 adalah versi terakhir untuk mendukung OLE DB Native provider dan aplikasi sekarang harus beralih ke ODBC kembali. seperti "masa lalu" dari SQL Server technet.microsoft.com/en-us/library/hh967418.aspx
Chris Wood
4
"OLE DB lebih baru dan bisa dibilang lebih baik" ini mungkin benar pada 2008 tetapi tidak pada 2014.
Michael David Watson
@MichaelDavidWatson Jadi apa yang akan Anda katakan. Lebih baik menggunakan ODBC oder OLEDB? Saya perlu mendukung Database SQL sebanyak mungkin. Dan seperti yang ditunjukkan, OLE DB juga dapat mengakses Datasource ODBC. Jadi mengapa Anda mengatakan "OLE DB lebih baru dan bisa dibilang lebih baik" masih salah pada 2015? :)
LuckyLikey
@ LuckyLikey MS telah meninggalkan OLEDB dan SQL Server tidak lagi mendukungnya (SS 2012 adalah yang terakhir mendukungnya). msdn.microsoft.com/en-us/library/hh967418.aspx
Robino
5

Keduanya adalah penyedia data (API yang akan digunakan kode Anda untuk berbicara dengan sumber data). Oledb yang diperkenalkan pada tahun 1998 dimaksudkan sebagai pengganti ODBC (diperkenalkan pada tahun 1992)

Arcturus
sumber
3

Saya tidak yakin dengan semua detail, tetapi pemahaman saya adalah bahwa OLE DB dan ODBC adalah dua API yang tersedia untuk terhubung ke berbagai jenis database tanpa harus berurusan dengan semua detail implementasi spesifik dari masing-masing. Menurut artikel Wikipedia tentang OLE DB , OLE DB adalah penerus Microsoft untuk ODBC, dan menyediakan beberapa fitur yang Anda mungkin tidak dapat lakukan dengan ODBC seperti mengakses spreadsheet sebagai sumber basis data.

pengguna10340
sumber
2

Di situs web Microsoft, ini menunjukkan bahwa penyedia OLEDB asli diterapkan ke server SQL secara langsung dan penyedia OLEDB lain yang disebut Penyedia OLEDB untuk ODBC untuk mengakses Database lain, seperti Sysbase, DB2 dll. Ada berbagai jenis komponen di bawah Penyedia OLEDB. Lihat Kueri Terdistribusi di MSDN untuk lebih lanjut.

FebWind
sumber
0

ODBC hanya berfungsi untuk database relasional, ia tidak dapat bekerja dengan database non-relasional seperti file Ms Excel. Di mana Olebd bisa melakukan segalanya.

Md Shahriar
sumber
-3

Untuk mengetahui mengapa M $ menciptakan OLEDB, Anda tidak dapat membandingkan OLEDB dengan ODBC. Sebagai gantinya, Anda harus membandingkan OLEDB dengan DAO, RDO, atau ADO. Yang terakhir ini sebagian besar bergantung pada SQL. Namun, OLEDB bergantung pada COM. Tapi ODBC sudah ada bertahun-tahun, jadi ada jembatan OLEDB-ODBC untuk memperbaiki ini. Saya pikir ada gambaran besar ketika M $ menemukan OLEDB.

Scott Chu
sumber