sự khác biệt giữa các nguồn dữ liệu OLE DB và ODBC là gì?


171

Tôi đã đọc một bài viết trợ giúp về MS Excel về p Pivotcache và tự hỏi ý nghĩa của các nguồn OLE DB và ODBC

... Bạn nên sử dụng thuộc tính CommandText thay vì thuộc tính SQL, hiện tồn tại chủ yếu để tương thích với các phiên bản Microsoft Excel trước đó. Nếu bạn sử dụng cả hai thuộc tính, giá trị của thuộc tính CommandText được ưu tiên.

Đối với các nguồn OLE DB , thuộc tính CommandType mô tả giá trị của thuộc tính CommandText.

Đối với các nguồn ODBC , thuộc tính CommandText hoạt động chính xác như thuộc tính SQL và việc đặt thuộc tính khiến dữ liệu được làm mới ...

Tôi thực sự đánh giá cao câu trả lời ngắn của bạn.


2
Chỉ là một ghi chú bên lề, theo cuốn sách này Thực hiện Kho dữ liệu với Microsoft SQL Server 2012 : "Microsoft đã thông báo rằng tại một thời điểm nào đó trong tương lai gần, hỗ trợ cho các kết nối OLE DB sẽ bị xóa theo các kết nối ODBC."
B. Burgdorf

2
Kể từ ngày 6 tháng 10 năm 2017, nó không được đánh giá cao. Xem blog.msdn.microsoft.com/sqlnativeclient/2017/10/06/ Lời
Bogey Jammer

Câu trả lời:


147

Theo ADO: ActiveX Data Object , một cuốn sách của Jason T. Roff, được xuất bản bởi O'Reilly Media vào năm 2001 (sơ đồ xuất sắc ở đây), ông nói chính xác những gì MOZILLA nói.

(trực tiếp từ trang 7 của cuốn sách đó)

  • ODBC chỉ cung cấp quyền truy cập vào cơ sở dữ liệu quan hệ
  • OLE DB cung cấp các tính năng sau
    • Truy cập dữ liệu bất kể định dạng hoặc vị trí của nó
    • Toàn quyền truy cập vào nguồn dữ liệu ODBC và trình điều khiển ODBC

Vì vậy, dường như OLE DB tương tác với các nguồn dữ liệu dựa trên SQL THRU lớp trình điều khiển ODBC.

văn bản thay thế

Tôi không chắc chắn 100% hình ảnh này là chính xác. Hai kết nối mà tôi không chắc chắn là ADO.NET thông qua ADO C-api và OLE DB chuyển ODBC sang nguồn dữ liệu dựa trên SQL (vì trong sơ đồ này , tác giả không đặt quyền truy cập của OLE DB qua ODBC, mà tôi tin là sự sai lầm).


7
Nếu OLE DB sử dụng ODBC để kết nối với các nguồn dữ liệu SQL, thì bất kỳ nguồn dữ liệu SQL nào được OLE DB hỗ trợ sẽ phải được ODBC hỗ trợ, tuy nhiên đây không phải là trường hợp - sơ đồ ban đầu phải chính xác (và không phải là sơ đồ này ).
Daniel Varod

8
Trên thực tế đôi khi OLE DB kết thúc trình điều khiển ODBC, đôi khi không. Xem tại đây
bobobobo

3
Mục này jamesmccaffrey.wordpress.com/2006/05/02/odbc-vs-ole-db nói rằng đối với SQL DS, OLEDB sẽ vượt qua ODBC.
Hernán

1
@DannyVarod À, đừng bận tâm. Tôi đã bỏ lỡ vòng loại quan trọng trong "mọi nguồn dữ liệu SQL được OLE DB hỗ trợ sẽ ...". Tôi đã nói về thực tế là vì OLE DB hỗ trợ các nguồn dữ liệu không phải RDBMS, nên tập hợp các nguồn dữ liệu chưa được lọc được OLE DB hỗ trợ là một siêu dữ liệu được ODBC hỗ trợ.
Asad Saeeduddin

4
ADO.NET không bao bọc ADO. Các lớp ADO.NET thường nói chuyện trực tiếp với cơ sở dữ liệu hoặc thư viện mạng cơ sở dữ liệu của họ, không thông qua bất kỳ lớp trình điều khiển / nhà cung cấp nào khác. Ví dụ: System.Data.SqlClientxử lý giao thức TDS trong mã được quản lý, chỉ sử dụng mã gốc để xử lý truyền TCP / Named Faucet / etc qua mạng. Đối với cơ sở dữ liệu không có nhà cung cấp được quản lý của riêng họ, bạn có thể sử dụng System.Data.OleDbđể bọc OLE DB hoặc System.Data.Odbcđể bọc ODBC, nhưng điều đó không được khuyến khích.
Mike Dimmick

55

ODBC: - Chỉ dành cho cơ sở dữ liệu quan hệ (Sql Server, Oracle, v.v.)

OLE DB: - Dành cho cả cơ sở dữ liệu quan hệ và không liên quan. (Oracle, Sql-Server, Excel, tệp thô, v.v.)


4
Sai, cả hai có thể nói chuyện với các cửa hàng không liên quan tùy thuộc vào trình điều khiển.
Andy Dent

1
Không, với ODBC, bạn có thể truy vấn ngay cả các tệp CSV phẳng, không chỉ các cơ sở dữ liệu quan hệ.
Wernfried Domscheit

Sai lầm! Ngoài ra còn có tệp văn bản và trình điều khiển ODBC XML.
Scott Chu

1
Tôi nghĩ rằng điều này không đúng ... 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, các bạn đang nói về ODBC trong năm 2009 hoặc 2016 ...? nó đúng
Yousha Aleayoub

42

Đây là sự hiểu biết của tôi (không có thẩm quyền):

ODBC là một tiêu chuẩn mở không tin tưởng về công nghệ được hỗ trợ bởi hầu hết các nhà cung cấp phần mềm. OLEDB là API của Microsoft dành riêng cho công nghệ từ thời COM (COM là công nghệ thành phần và khả năng tương tác trước .NET)

Tại một số điểm, các nhà cung cấp dữ liệu khác nhau (ví dụ: Oracle, v.v.), sẵn sàng tương thích với người tiêu dùng dữ liệu của Microsoft, đã cung cấp các nhà cung cấp OLEDB cho các sản phẩm của họ, nhưng đối với hầu hết các OLEDB vẫn là một tiêu chuẩn duy nhất của Microsoft. Giờ đây, hầu hết các nguồn dữ liệu của Microsoft đều cho phép truy cập cả ODBC và OLEDB, chủ yếu để tương thích với người tiêu dùng dữ liệu ODBC cũ. Ngoài ra, còn tồn tại nhà cung cấp OLEDB (trình bao bọc) cho ODBC, cho phép một người sử dụng OLEDB để truy cập các nguồn dữ liệu ODBC nếu muốn.

Về các tính năng, OLEDB thực sự phong phú hơn ODBC nhưng bị hội chứng một vòng theo quy tắc tất cả (quá chung chung, quá phức tạp, không quan điểm).

Trong các khách hàng và nhà cung cấp dữ liệu ODBC không thuộc thế giới của Microsoft được sử dụng rộng rãi và không đi đâu cả.

Bên trong bong bóng Microsoft OLEDB đang được loại bỏ theo hướng có lợi cho các API .NET gốc được xây dựng dựa trên bất kỳ lớp vận chuyển gốc nào cho nguồn dữ liệu đó (ví dụ: TDS cho MS SQL Server).


20

ODBC và OLE DB là hai công nghệ truy cập dữ liệu cạnh tranh. Cụ thể liên quan đến SQL Server, Microsoft đã quảng bá cả hai là Hướng tương lai ưa thích của họ - mặc dù tại các thời điểm khác nhau.

ODBC

ODBC là một giao diện tiêu chuẩn toàn ngành để truy cập dữ liệu giống như bảng. Nó chủ yếu được phát triển cho cơ sở dữ liệu và trình bày dữ liệu trong các bộ sưu tập hồ sơ, mỗi dữ liệu được nhóm lại thành một bộ sưu tập các trường. Mỗi trường có kiểu dữ liệu riêng phù hợp với loại dữ liệu chứa. Mỗi nhà cung cấp cơ sở dữ liệu (Microsoft, Oracle, Postgres, Hoài) cung cấp trình điều khiển ODBC cho cơ sở dữ liệu của họ.

Ngoài ra còn có trình điều khiển ODBC cho các đối tượng, mặc dù chúng không phải là bảng cơ sở dữ liệu, nhưng đủ giống nhau để truy cập dữ liệu theo cách tương tự là hữu ích. Ví dụ là bảng tính, tệp CSV và báo cáo cột.

DB OLE

OLE DB là một công nghệ của Microsoft để truy cập dữ liệu. Không giống như ODBC, nó bao gồm cả dữ liệu giống như bảng và không giống như bảng như thông điệp email, trang web, tài liệu Word và thư mục tệp. Tuy nhiên, nó là hướng thủ tục thay vì hướng đối tượng và được coi là một giao diện khá khó khăn để phát triển quyền truy cập vào các nguồn dữ liệu. Để khắc phục điều này, ADO được thiết kế để trở thành một lớp hướng đối tượng trên đỉnh OLE DB và để cung cấp một cách đơn giản hơn và ở cấp độ cao hơn - mặc dù vẫn rất mạnh mẽ - làm việc với nó. Ưu điểm lớn của ADO là bạn có thể sử dụng nó để thao tác các thuộc tính dành riêng cho một loại nguồn dữ liệu nhất định, dễ dàng như bạn có thể sử dụng nó để truy cập vào các thuộc tính áp dụng cho tất cả các loại nguồn dữ liệu. Bạn không bị giới hạn ở một số mẫu số chung thấp nhất không đạt yêu cầu.

Mặc dù tất cả các cơ sở dữ liệu đều có trình điều khiển ODBC, nhưng tất cả chúng không có trình điều khiển OLE DB. Tuy nhiên, có một giao diện có sẵn giữa OLE và ODBC có thể được sử dụng nếu bạn muốn truy cập chúng theo kiểu giống như OLE DB. Giao diện này được gọi là MSDASQL (nhà cung cấp Microsoft OLE DB cho ODBC).

Công nghệ truy cập dữ liệu SQL Server

Kể từ SQL Server là (1) thực hiện bởi Microsoft, và (2) các nền tảng cơ sở dữ liệu của Microsoft, cả ODBC và OLE DB là một sự phù hợp tự nhiên cho nó.

ODBC

Vì tất cả các nền tảng cơ sở dữ liệu khác có giao diện ODBC, Microsoft rõ ràng phải cung cấp một cho SQL Server. Ngoài ra, DAO, công nghệ mặc định ban đầu trong Microsoft Access, sử dụng ODBC làm cách nói chuyện tiêu chuẩn với tất cả các nguồn dữ liệu bên ngoài. Điều này làm cho một giao diện ODBC trở thành một thông số không. Trình điều khiển ODBC phiên bản 6 cho SQL Server, được phát hành cùng với SQL Server 2000, vẫn còn đó. Các phiên bản cập nhật đã được phát hành để xử lý các loại dữ liệu mới, công nghệ kết nối, mã hóa, HA / DR, v.v. đã xuất hiện cùng với các bản phát hành tiếp theo. Kể từ ngày 09/07/2018, bản phát hành gần đây nhất là Trình điều khiển ODBC v13.1 cho Máy chủ SQL, phát hành vào ngày 23/03/2018.

DB OLE

Đây là công nghệ riêng của Microsoft, công ty mà họ đã quảng bá mạnh mẽ từ khoảng năm 2002 - 2005, cùng với lớp ADO đi kèm. Họ rõ ràng hy vọng rằng nó sẽ trở thành công nghệ truy cập dữ liệu được lựa chọn. (Họ thậm chí đã biến ADO thành phương thức mặc định để truy cập dữ liệu trong Access 2002/2003.) Tuy nhiên, cuối cùng, rõ ràng là điều này sẽ không xảy ra vì một số lý do, chẳng hạn như:

  1. Thế giới sẽ không chuyển đổi sang các công nghệ của Microsoft và tránh xa ODBC;
  2. DAO / ODBC nhanh hơn ADO / OLE DB và cũng được tích hợp hoàn toàn vào MS Access, do đó sẽ không chết một cách tự nhiên;
  3. Các công nghệ mới đang được Microsoft phát triển, cụ thể là ADO.NET, cũng có thể nói chuyện trực tiếp với ODBC. ADO.NET cũng có thể nói chuyện trực tiếp với OLE DB (do đó để ADO ở dưới nước), nhưng nó không (không giống như ADO) chỉ phụ thuộc vào nó.

Vì những lý do này những lý do khác , Microsoft thực sự không tán thành OLE DB như một công nghệ truy cập dữ liệu cho SQL Server phát hành sau v11 (SQL Server 2012). Trong một vài năm trước thời điểm này, họ đã sản xuất và cập nhật Máy khách bản địa SQL Server, hỗ trợ cả công nghệ ODBC và OLE DB. Tuy nhiên, vào cuối năm 2012, họ tuyên bố rằng họ sẽ liên kết với ODBC để truy cập dữ liệu quan hệ riêng trong SQL Server và khuyến khích mọi người khác làm điều tương tự. Họ cũng tuyên bố rằng SQL Server phát hành sau v11 / SQL Server 2012 sẽ chủ động không hỗ trợ OLE DB!

Thông báo này đã gây ra một cơn bão phản đối. Mọi người không thể hiểu được tại sao MS đột nhiên phản đối một công nghệ mà họ đã mất nhiều năm để họ cam kết. Ngoài ra, SSAS / SSRS và SSIS, là các ứng dụng do MS viết liên kết mật thiết với SQL Server, hoàn toàn phụ thuộc hoặc một phần vào OLE DB. Tuy nhiên, một phàn nàn khác là OLE DB có một số tính năng mong muốn mà dường như không thể chuyển trở lại ODBC - sau tất cả, OLE DB có nhiều điểm tốt.

Vào tháng 10 năm 2017, Microsoft đã đồng ý và chính thức không phản đối OLE DB . Họ đã thông báo về sự xuất hiện của trình điều khiển mới (MSOLEDBSQL) sắp có bộ tính năng hiện có của Máy khách bản địa 11 và cũng sẽ giới thiệu chuyển đổi dự phòng đa mạng con và hỗ trợ TLS 1.2. Trình điều khiển đã được phát hành vào tháng 3 năm 2018.


@ChieltenBrinke Tôi đã đăng bài cùng nhau từ một số nguồn, chẳng hạn như các liên kết tôi đã cập nhật bài đăng của mình để bao gồm và, nhất là, các bình luận mà họ đã kích động. Các nguồn khác là cuốn sách của Jason Roff về ADO được đề cập bởi bobobobo và Cẩm nang dành cho nhà phát triển máy tính để bàn Access Access, của Litwin, Getz và Gunderloy (thực sự cũ, nhưng là một tác phẩm kinh điển thực sự). Tôi không có bất kỳ loại theo dõi nào bên trong Microsoft, vì vậy những suy đoán của tôi về suy nghĩ đằng sau những thay đổi hướng khác nhau của họ, mặc dù có lý, hoàn toàn là của riêng tôi.
marktwo

6

Ở mức độ rất cơ bản, đó chỉ là các API khác nhau cho các nguồn dữ liệu khác nhau (ví dụ: cơ sở dữ liệu). OLE DB mới hơn và tốt hơn nhiều.

Bạn có thể đọc thêm trên cả hai trong Wikipedia:

  1. DB OLE
  2. ODBC

Tức là bạn có thể kết nối với cùng một cơ sở dữ liệu bằng trình điều khiển ODBC hoặc trình điều khiển OLE DB. Sự khác biệt trong hành vi cơ sở dữ liệu trong những trường hợp đó là những gì cuốn sách của bạn đề cập đến.


4
Cũng như nhiều môn học liên quan đến CNTT, mọi thứ gần như đã hoàn tất. SQL 2012 là phiên bản cuối cùng hỗ trợ nhà cung cấp OLE DB Native và các ứng dụng hiện nên chuyển sang sao lưu ODBC. như "ngày xưa" của SQL Server technet.microsoft.com/en-us/l Library / hh967418.aspx
Chris Wood

4
"OLE DB mới hơn và có thể nói là tốt hơn" điều này có thể đúng trong năm 2008 nhưng không phải vào năm 2014.
Michael David Watson

@MichaelDavidWatson Vậy bạn sẽ nói gì. Sử dụng tốt hơn ODBC oder OLEDB? Tôi cần hỗ trợ càng nhiều cơ sở dữ liệu SQL khác nhau càng tốt. Và như đã chỉ ra, OLE DB cũng có thể truy cập vào Nguồn dữ liệu ODBC. Vậy tại sao bạn lại nói "OLE DB mới hơn và tốt hơn có thể nói" vẫn chưa chính xác trong năm 2015? :)
LuckyLikey

@LuckyLikey MS đã từ chối OLEDB và SQL Server không còn hỗ trợ nó nữa (SS 2012 là người cuối cùng hỗ trợ nó). msdn.microsoft.com/en-us/l
Library / hh967418.aspx

5

Cả hai đều là nhà cung cấp dữ liệu (API mà mã của bạn sẽ sử dụng để nói chuyện với nguồn dữ liệu). Oledb được giới thiệu vào năm 1998 có nghĩa là một sự thay thế cho ODBC (được giới thiệu vào năm 1992)



3

Tôi không chắc chắn về tất cả các chi tiết, nhưng tôi hiểu rằng OLE DB và ODBC là hai API có sẵn để kết nối với nhiều loại cơ sở dữ liệu khác nhau mà không phải xử lý tất cả các chi tiết cụ thể triển khai của từng loại. Theo bài viết trên Wikipedia về OLE DB , OLE DB là sản phẩm kế thừa của ODBC và cung cấp một số tính năng mà bạn không thể làm với ODBC như truy cập bảng tính dưới dạng nguồn cơ sở dữ liệu.


2

Tại trang web của Microsoft, nó cho thấy nhà cung cấp OLEDB bản địa được áp dụng trực tiếp cho máy chủ SQL và một nhà cung cấp OLEDB khác có tên là Nhà cung cấp OLEDB cho ODBC để truy cập Cơ sở dữ liệu khác, như Sysbase, DB2, v.v. Có các loại thành phần khác nhau trong Nhà cung cấp OLEDB. Xem Truy vấn phân tán trên MSDN để biết thêm.


0

ODBC chỉ hoạt động cho các cơ sở dữ liệu quan hệ, nó không thể hoạt động với các cơ sở dữ liệu không liên quan như các tệp Ms Excel. Nơi Olebd có thể làm mọi thứ.


-3

Để biết lý do tại sao M $ phát minh ra OLEDB, bạn không thể so sánh OLEDB với ODBC. Thay vào đó, bạn nên so sánh OLEDB với DAO, RDO hoặc ADO. Cái sau chủ yếu dựa vào SQL. Tuy nhiên, OLEDB dựa vào COM. Nhưng ODBC đã có từ nhiều năm nay, vì vậy có cầu nối OLEDB-ODBC để khắc phục điều này. Tôi nghĩ rằng có một bức tranh lớn khi M $ phát minh ra OLEDB.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.