欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

OLEDB和ODBC的区别(优缺点)

程序员文章站 2022-05-01 20:15:45
odbc是一种连接数据库的开放标准。 odbc(opendatabase connectivity,开放数据库互连)是微软公司开放服务结构(wosa,windows ope...
odbc是一种连接数据库的开放标准。

odbc(opendatabase connectivity,开放数据库互连)是微软公司开放服务结构(wosa,windows openservices architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准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))