OLEDB和ODBC的区别(优缺点)

时间:2021-08-25 23:48:20
ODBC是一种连接数据库的开放标准,OLEDB(对象链接和嵌入数据库)位于ODBC层与应用程序之间. 在你的ASP页面里,ADO是位于OLEDB之上的应用程序. 你的ADO调用先被送到OLEDB,然后再交由ODBC处理
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))

OLEDB和ODBC的区别(优缺点)的更多相关文章

  1. OLEDB和ODBC的区别

    ODBC(开放数据库互连):是Microsoft引进的一种早期数据库接口技术.它实际上是ADO的前身.早期的数据库连接是非常困难的. 每个数据库的格式都不一样,开发者得对他们所开发的每种数据库的底层A ...

  2. SQL那些事儿(十一)--ODBC,OLE-DB,ADO.NET区别[转]

    一.ODBC   ODBC的由来 1992年Microsoft和Sybase.Digital共同制定了ODBC标准接口,以单一的ODBC API来存取各种不同的数据库.随后ODBC便获得了许多数据库厂 ...

  3. Microsoft.Jet.OLEDB.4.0和Microsoft.ACE.OLEDB.12.0的区别

    Microsoft.Jet.OLEDB.4.0和Microsoft.ACE.OLEDB.12.0的区别 时间 2012-12-19 20:30:12  CSDN博客原文  http://blog.cs ...

  4. 关于JDBC和ODBC的区别

    转载..... JDBC与ODBC都可以实现类似的功能,但JDBC与ODBC的区别是他们的开发架构不同,其实现细节上也有所差异. 谈到JDBC与ODBC的区别,JDBC和ODBC其实都是用来连接数据库 ...

  5. SVN和Git 介绍,区别,优缺点以及适用范围

    SVN是Subversion的简称,是一个开放源代码的版本控制系统,支持大多数常见的操作系统.作为一个开源的版本控制系统,Subversion管理着随时间改变的数据.这些数据放置在一个*资料档案库( ...

  6. JDBC 与ODBC的区别

    一.ODBC(Open   DataBase   Connectivity   :  开放数据库连接)         ODBC  总体结构  应用程序    执行处理并调用odbc函数,提交sql语 ...

  7. JDBC与ODBC的区别与应用

    jdbc是使用通过JAVA的数据库驱动直接和数据库相连,而jdbc-odbc连接的是ODBC的数据源,真正与数据库建立连接的是ODBC! 建议使用JDBC直接连接,同时最好使用连接池! JDBC 是 ...

  8. xml与json的原理,区别,优缺点.

    1.定义介绍 (1).XML定义扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许 ...

  9. babel-runtime和babel-polyfill两者区别优缺点

    先说两种方式的原理: babel-polyfill 使用场景 Babel 默认只转换新的 JavaScript 语法,而不转换新的 API.例如,Iterator.Generator.Set.Maps ...

随机推荐

  1. 关于LESS

    LESS 是动态的样式表语言,通过简洁明了的语法定义,使编写 CSS 的工作变得非常简单. 翻译成大白话:写CSS算是体力活,并没有编程的感觉,不给前端人员装逼的机会,于是就搞了这玩意,相当于编程写C ...

  2. sass基础用法

    嵌套: 1.选择器嵌套: 2.属性嵌套; .box {     border-top: 1px solid red;     border-bottom: 1px solid green; } .bo ...

  3. wpf comboBox取值问题

    这是获取值后台代码 private void button1_Click(object sender, RoutedEventArgs e)        {            combBox = ...

  4. 用Google Analytics跟踪JavaScript Errors (译)

    通过custom events来实施 // Track basic JavaScript errors window.addEventListener('error', function(e) { _ ...

  5. 在linux下的apache配置https协议,开启ssl连接

    环境:linux 配置https协议,需要2大步骤: 一.生成服务器证书 1.安装openssl软件 yum install -y openssl mod_ssl 2.生成服务器私匙,生成server ...

  6. MyISAM 存储引擎

    在MYSQL 5.1 以及之前的版本,MyISAM 是默认的存储引擎.MyISAM 提供了大量的特性,包括全文索引,压缩,空间函数(gis)等,但是MyISAM不支持事务和行级锁,而且有一个毫无疑问的 ...

  7. iOS集成微信支付

    微信支付的开发 前言:之前听说过微信支付有很多坑,其实没有想象的那么坑,整体感觉很容易上手,按照它的流程来不会有错!PS:官方的流程看的TMD烦,好啦,废话有点多,进入开发.(ps:每个微信的版本一直 ...

  8. jsp-1 简单的应用servlet,并用其跳转页面

    jspweb里面用到的servlet跳转页面的方法 使用的jar包只有 commons-lang3-3.5.jar 运行时,tomcat会先根据web.xml里面的信息,查找servlet <? ...

  9. JavaScript基础知识(if、if else、else if、while、switch&period;&period;&period;case语句)

    13.语句 概念:就是分号(:) 代表一条语句的结束 习惯:一行只编写一条语句:一行编写多条语句(代码可读性较差) 语句块:可以包含多条语句     "{ }"将多条语句包裹 u ...

  10. A2D Framework - 看如何精简业务逻辑 - 缓存子系统

    A2D中一项功能是关于Cache的,能够将判断.获取.删除cache的代码缩减到最少量,如下是Order业务逻辑的demo示范: interface IOrder { [Cachable()] str ...