OLEDB和ODBC的區別(優缺點)

來源:互聯網
上載者:User

ODBC是一種串連資料庫的開放標準。

ODBC(OpenDataBase Connectivity,開放資料庫互連)是微軟公司開放服務結構(WOSA,Windows OpenServices Architecture)中有關資料庫的一個組成部分,它建立了一組規範,並提供了一組對資料庫訪問的標準API(API)。這些API利用SQL來完成其大部分任務。ODBC本身也提供了對SQL語言的支援,使用者可以直接將SQL語句送給ODBC。
它本身就是為了是資料庫的使用者不必考慮使用的是何種資料庫而只需要相同的操作而設計的。

ODBC是Open Database Connect即開放資料庫互連的簡稱,它是由Microsoft 公司於1991 年提出的一個用於訪問資料庫的統一介面標準,是應用程式和資料庫系統之間的中介軟體。它通過使用相應應用平台上和所需資料庫對應的驅動程式與應用程式的互動來實現對資料庫的操作,避免了在應用程式中直接調用與資料庫相關的操作,從而提供了資料庫的獨立性。
ODBC 主要由驅動程式和驅動程式管理器組成。驅動程式是一個用以支援ODBC 函數調用的模組,每個驅動程式對應於相應的資料庫,當應用程式從基於一個資料庫系統移植到另一個時,只需更改應用程式中由ODBC 管理程式設定的與相應資料庫系統對應的別名即可。驅動程式管理器可連結到所有ODBC 應用程式中,它負責管理應用程式中ODBC 函數與DLL 中函數的綁定。
ODBC 使用層次的方法來管理資料庫,在資料庫通訊結構的每一層,對可能出現依賴資料庫產品自身特性的地方,ODBC 都引入一個公用介面以解決潛在的不一致性,從而很好地解決了基於資料庫系統應用程式的相對獨立性,這也是ODBC 一經推出就獲得巨大成功的重要原因之一。

從結構上分,ODBC 分為單束式和多束式兩類。

1.單束式驅動程式

單束式驅動程式介於應用程式和資料庫之間,像中介驅動程式一樣資料提供一個統一的資料訪問方式。當使用者進行資料庫操作時,應用程式傳遞一個ODBC 函數調用給ODBC 驅動程式管理器,由ODBC API 判斷該調用是由它直接處理並將結果返回還是送交驅動程式執行並將結果返回。由上可見,單束式驅動程式本身是一個資料庫引擎,由它直接可完成對資料庫的操作,儘管該資料庫可能位於網路的任何地方。

2.多束式驅動程式

多束式驅動程式負責在資料庫引擎和客戶應用程式之間傳送命令和資料,它本身並不執行資料處理操作而用於遠程操作的網路通訊協定的一個介面。前端應用程式提出對資料庫處理的請求,該請求轉給ODBC 驅動程式管理器,驅動程式管理器依據請求的情況,就地完成或傳給多束驅動程式,多束式驅動程式將請求翻譯為特定廠家的資料庫通訊介面(如Oracle 的SQLNet)所能理解的形式並交於介面去處理,介面把請求經網路傳送給伺服器上的資料引擎,伺服器處理完後把結果發回給資料庫通訊介面,資料庫介面將結果傳給多束式ODBC 驅動程式,再由驅動程式將結果傳給應用程式。

ODBC(開放資料庫互連):是Microsoft引進的一種早期資料庫介面技術。它實際上是ADO的前身。早期的資料庫連接是非常困難的. 每個資料庫的格式都不一樣,開發人員得對他們所開發的每種資料庫的底層API有深刻的瞭解. 因此,能處理各種各樣資料庫的通用的API就應運而生了. 也就是現在的ODBC(Open Database Connectivity), ODBC是人們在建立通用API的早期產物. 有許多種資料庫遵從了這種標準,被稱為ODBC相容的資料庫.

OLEDB(物件連結與嵌入資料庫)位於ODBC層與應用程式之間. 在你的ASP頁面裡,ADO是位於OLEDB之上的"應用程式". 你的ADO調用先被送到OLEDB,然後再交由ODBC處理. 你可以直接連接到OLEDB層,如果你這麼做了,你將看到伺服器端遊標(recordset的預設的遊標,也是最常用的遊標)效能的提升.

參考 http://www.connectionstrings.com/

用odbc串連資料庫:

odbc中提供三種dsn,它們的區別很簡單:使用者dsn只能用於本使用者。系統dsn和檔案dsn的區別只在於串連資訊的存放位置不同:系統dsn存放在odbc儲存區裡,而檔案dsn則放在一個文字檔中。
它們的建立方法就不說了。

在asp中使用它們時,寫法如下:

1.sql server:

用系統dsn: connstr="DSN=dsnname; UID=xx; PWD=xxx;DATABASE=dbname"
用檔案dsn:connstr="FILEDSN=xx;UID=xx; PWD=xxx;DATABASE=dbname"
還可以用連接字串(從而不用再建立dsn):
connstr="DRIVER={SQLSERVER};SERVER=servername;UID=xx;PWD=xxx"

2.access:

用系統dsn: connstr="DSN=dsnname"
(或者為:connstr="DSN=dsnname;UID=xx;PWD=xxx")
用檔案dsn:connstr="FILEDSN=xx"
還可以用連接字串(從而不用再建立dsn):
connstr="DRIVER={MicrosoftAccess Driver};DBQ=d:\abc\abc.mdb"

用oledb串連資料庫:

1.sql server:
connstr="PROVIDER=SQLOLEDB;
DATASOURCE=servername;UID=xx;PWD=xxx;DATABASE=dbname"

2.access:
connstr="PROVICER=MICROSOFT.JET.OLEDB.4.0;
DATASOURCE=c:\abc\abc.mdb"

值得注意的是,OLE DB對ODBC的相容性,允許OLE DB訪問現有的ODBC資料來源。其優點很明顯,由於ODBC相對OLE DB來說使用得更為普遍,因此可以獲得的ODBC驅動程式相應地要比OLE DB的要多。這樣不一定要得到OLE DB的驅動程式,就可以立即訪問原有的資料系統。
提供者位於OLE DB層,而驅動程式位於ODBC層。如果想使用一個ODBC資料來源,需要使用針對ODBC的OLE DB提供者,它會接著使用相應的ODBC驅動程式。如果不需要使用ODBC資料來源,那麼可以使用相應的OLE DB提供者,這些通常稱為本地提供者(native provider)。
可以清楚地看出使用ODBC提供者意味著需要一個額外的層。因此,當訪問相同的資料時,針對ODBC的OLE DB提供者可能會比本地的OLEDB提供者的速度慢一些。

ODBC,OLEDB連接字串詳解

SQL Server

u ODBC
1. Standard Security:
"Driver={SQLServer};Server=Aron1;Database=pubs;Uid=sa;Pwd=asdasd;"
2. Trusted connection:
"Driver={SQLServer};Server=Aron1;Database=pubs;Trusted_Connection=yes;"
3. Prompt for username and password:
oConn.Properties("Prompt")= adPromptAlways
oConn.Open"Driver={SQL Server};Server=Aron1;DataBase=pubs;"

u OLE DB, OleDbConnection (.NET)

1. Standard Security:
"Provider=sqloledb;DataSource=Aron1;Initial Catalog=pubs;User Id=sa;Password=asdasd;"
2. Trusted Connection:
"Provider=sqloledb;DataSource=Aron1;Initial Catalog=pubs;Integrated Security=SSPI;"
(useserverName\instanceName as Data Source to use an specifik SQLServer instance,only SQLServer2000)
3. Prompt for username and password:
oConn.Provider= "sqloledb"
oConn.Properties("Prompt")= adPromptAlways
oConn.Open"Data Source=Aron1;Initial Catalog=pubs;"
4. Connect via an IP address:
"Provider=sqloledb;DataSource=190.190.200.100,1433;Network Library=DBMSSOCN;Initial Catalog=pubs;UserID=sa;Password=asdasd;"
(DBMSSOCN=TCP/IPinstead of Named Pipes, at the end of the Data Source is the port to use (1433is the default))

u SqlConnection (.NET)

1. Standard Security:
"DataSource=Aron1;Initial Catalog=pubs;User Id=sa;Password=asdasd;"
- or -
"Server=Aron1;Database=pubs;UserID=sa;Password=asdasd;Trusted_Connection=False"
(bothconnection strings produces the same result)
2. Trusted Connection:
"DataSource=Aron1;Initial Catalog=pubs;Integrated Security=SSPI;"
- or -
"Server=Aron1;Database=pubs;Trusted_Connection=True;"
(bothconnection strings produces the same result)
(useserverName\instanceName as Data Source to use an specifik SQLServer instance,only SQLServer2000)
3. Connect via an IP address:
"DataSource=190.190.200.100,1433;Network Library=DBMSSOCN;Initial Catalog=pubs;UserID=sa;Password=asdasd;"
(DBMSSOCN=TCP/IPinstead of Named Pipes, at the end of the Data Source is the port to use (1433is the default))

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.