ado,odbc,ole等数据库连接技术小析
来源:互联网 发布:1元云购源码下载 编辑:程序博客网 时间:2024/06/06 16:51
ado,odbc,ole等数据库连接技术小析
最近初次接触数据库连接技术。一堆名词,ado,odbc,ole……很是让我纠结。看了几本书也没说清楚他们的本质和联系。
我对他们的初步理解是:
在各个编程平台,连接数据库的几种技术。每种技术各有各的特点,有的速度快,有的支持范围广。通过这些技术,可以让界面和后台数据库想连接。
可是具体的细节还是很模糊,特别在csdn找了几篇文章,汇总一下吧:
———————————————————————————————————————————————
ADO,OLEDB,ODBC,DAO,RDO的区别
ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。---出现的最早,但不总是万能。
DAO:数据访问对象是用来显露了Microsoft Jet数据库引擎(最早是给Microsoft Access 所使用,现在已经支持其它数据库),并允许开发者通过ODBC直接连接到其他数据库一样,直接连接到 Access 表。DAO 最适用于单系统应用程序或在小范围本地分布使用。其内部已经对Jet数据库的访问进行了加速优化,而且其使用起来也是很方便的。所以如果数据库是Access数据库且是本地使用的话,建议使用这种访问方式---应用的专一性
RDO(Remote Data Objects)远程数据对象是一个到ODBC的、面向对象的数据访问接口,它同易于使用的DAO style组合在一起,提供了一个接口,形式上展示出所有ODBC的底层功能和灵活性。尽管RDO在很好地访问Jet或ISAM数据库方面受到限制,而且它只能通过现存的ODBC驱动程序来访问关系数据库。但是,RDO已被证明是许多SQL Server、Oracle 以及其他大型关系数据库开发者经常选用的最佳接口。RDO提供了用来访问存储过程和复杂结果集的更多和更复杂的对象、属性,以及方法。---无疑是在odbc基础上的
OLE DB 是 Microsoft 的一个战略性系统级编程接口,用于管理整个组织内的数据。OLE DB 是建立在 ODBC 功能之上的一个开放规范。ODBC 是为访问关系型数据库而专门开发的,OLE DB 则用于访问关系型和非关系型信息源,例如主机 ISAM/VSAM 和层次数据库,电子邮件和文件系统存储,文本、图形和地理数据以及自定义业务对象。
OLE DB 定义了一组 COM 接口,对各种数据库管理系统服务进行封装,并允许创建软件组件,实现这些服务。OLE DB 组件包括数据提供程序(包含和表现数据)、数据使用者(使用数据)和服务组件(处理和传送数据,例如,查询处理器和游标引擎)。
OLE DB 接口有助于平滑地集成组件,这样,OLE DB 组件厂商就可以快速地向市场提供高质量 OLE DB 组件。此外,OLE DB 包含了一个连接 ODBC 的“桥梁”,对现用的各种 ODBC 关系型数据库驱动程序提供一贯的支持。---号称取代odbc,但也兼容odbc
ADO(ActiveX Data Object)是DAO/RDO的后继产物。ADO 2.0在功能上与RDO更相似,而且一般来说,在这两种模型之间有一种相似的映射关系。ADO "扩展 "了DAO和 RDO 所使用的对象模型,这意味着它包含较少的对象、更多的属性、方法(和参数),以及事件。 作为最新的数据库访问模式,ADO的使用也是简单易用,所以微软已经明确表示今后把重点放在ADO上,对DAO/RDO不再作升级,所以ADO已经成为了当前数据库开发的主流。 ADO涉及的数据存储有DSN(数据源名称)、ODBC(开放式数据连接)以及OLE DB三种方式。后面的例程将详细讲解这三种方式的具体访问实现。---可以说是对odbc,oledb这些系统级的编程接口的汇接,并对DAO,RDO这些应用级的编程接口的升级吧。
——————————————————————————————————————————————————
OLEDB的性能比较
有许多种办法可以连上一个数据库. 你可以用System DSN, DSN-less连接或是本地的OLEDB provider. OLEDB? 这是什么什么玩艺儿? 也许你们中的许多人以前没有听说过. 要回答这个问题,我们先得回顾一下数据库连接的历史.
早期的数据库连接是非常困难的. 每个数据库的格式都不一样,开发者得对他们所开发的每种数据库的底层API有深刻的了解. 因此,能处理各种各样数据库的通用的API就应运而生了. 也就是现在的ODBC(Open Database Connectivity), ODBC是人们在创建通用API的早期产物. 有许多种数据库遵从了这种标准,被称为ODBC兼容的数据库.
ODBC兼容的数据库包括Access, MS-SQL Server, Oracle, Informix等.
但ODBC并不是完美无缺的,它仍然含有大量的低级的调用,开发ODBC应用程序仍较困难. 开发者不得不将大量的精力花在底层的数据库通信中,而不能专注于他们所要处理的数据. 后来微软提出了一个解决方案: DAO(Data Access Objects). DAO的代码看起来象这样:
objItem.AddNew
objItem.Name = "Chair "
objItem.Price = 10
objItem.Update
你也许看过DAO的代码. 后来DAO演变为RDO(Remote Data Objects, 为分布式数据库体系设计), 再后来是ADO. 尽管它们都有各自的不足之处. 根据微软的说法, "ODBC提供了本地SQL数据的存取,DAO提供了高级的数据对象 ". DAO和RDO都需要数据以SQL(Structured Query Language)的格式存储. 针对这些缺陷,微软提出了OLEDB,一个基于COM的数据存储对象,能提供对所有类型的数据的操作,甚至能在离线的情况下存取数据(比方说,你使用的是你的便携机,你可以毫不费力地看到最后一次数据同步时的数据映像).
OLEDB位于ODBC层与应用程序之间. 在你的ASP页面里,ADO是位于OLEDB之上的 "应用程序 ". 你的ADO调用先被送到OLEDB,然后再交由ODBC处理. 你可以直接连接到OLEDB层,如果你这么做了,你将看到服务器端游标(recordset的缺省的游标,也是最常用的游标)性能的提升. 那我们该如何直接连接到OLEDB呢?
要想直接连到OLEDB层,你必须改变你的connection对象连接字符串. 先用老办法创建一个connectiong对象:
Dim objConn
Set objConn = Server.CreateObject( "ADODB.Connection ")
接下去,我们不用常规的类似DSN=pubs or DRIVER={MS SQL-
Server};UID=sa;PWD=;DATABASE=pubs;SERVER=myMachine的连接字符串,而采用下面的连接字符串:
objConn.ConnectionString = "Provider=ProviderName; Data
Source=DatabaseSource; Initial Catalog=DatabaseName; User ID=UserID;
Password=Password "
对于SQL:
ProviderName = SQLOLEDB
Data Source = Server Name
Initial Catalog = Database Name
对于Access:
ProviderName = Microsoft.Jet.OLEDB.3.51
Data Source = Full path to .MDB file
下面让我们来看两个例子,一个是针对Access的,还有一个是针对SQL的. 如果你的连接SQL的DSN-less连接串是这样的:
DRIVER={MS SQL-Server};UID=sa;PWD=;DATABASE=pubs;SERVER=myMachine
那么直接连接到OLEDB的连接字符串应该是这样的:
Provider=SQLOLEDB; Data Source=myMachine; Initial Catalog=pubs; User
ID=sa; Password=
让我们来看看Access,如果你的Access的连接字符串是:
DRIVER={Microsoft Access Driver (*.mdb)};
DBQ=c:/inetpub/wwwroot/users.mdb
那么直接连接到OLEDB的连接字符串应该是这样的:
Provider=Microsoft.Jet.OLEDB.3.51; Data
Source=c:/inetpub/wwwroot/users.mdb
就是这么简单,挺棒的吧?
这很重要吗?
现在你也许对为什么要学习这种新的数据库连接方法感到有些儿迷惑,为什么不走标准的DSN-less/System DSN路子呢? 让我来告诉你为什么. 据Wrox出的ADO 2.0
Programmer 's Reference一书中的测试,用OLEDB连接而不是DSN或DSN-less的连接会得到的性能提升如下:
性能比较
SQL Access
OLEDB DSN OLEDB DSN
Connection Times: 18 82 Connection Times: 62 99
Iterating through 1,000 Records Times: 2900 5400 Iterating through
1,000 Records Times: 100 950
————————————————————————————————————————————————————
rdo 远程的
ado active X数据库控件
odbc 数据源
DAO 用的是微软自己的access,不用其它数据库软件支持
ADO 是基于oledb的连接技术,优点是速度快,使用方便,省略了很多细节。
DAO 的设计思想使用一种接口来访问多种类型的数据。它在处理时使用Microsoft.Jet接口的ODBC数据源。DAO.Jet数据库服务的最独特的方面就是它有自己的查询引擎。但它的最大弱点是由于查询服务运行于本地机上,这就意味着在处理任何远程数据请求之前,必须把所有的数据都传输到本地工作站上,但在低速连接中调用大量数据时这是一个缺点。另外的一个缺点是它不“认识”Internet,DAO.Jet 服务是为单机和局域网(LAN)开发的。
ADO和DAO的最大区别是ADO使用OLEDB接口而非ODBC作为底层数据供应者的。依靠OLEDB,ADO也能够支持对非SQL数据存储的纪录集访问,如Email和网络目录服务。OLEDB提供了比ODBC更多的灵活性和易用性。OLEDB服务的内部设计使得它能存取标准SQL类型的数据那样容易的访问非SQL数据存储。OLEDB的一个关键特性是它可以提供对描述性数据存储的处理。通过提供某种方法来描述数据存储方式,OLEDB可以对以任何格式存储的数据和以任何方法执行的查询提供访问途径。由于OLEDB并不要求所有数据存储都以表格、行和列的形式出现。所以与ODBC相比,它适用于更多的数据存储类型。
——————————————————————————————————————————————————
odbc: 曾经的数据库通信标准
oledb: 在一切对象化的趋势下,ms打算用它取代odbc.
oledb分两种:直接的oledb和面向odbc的oledb,后者架构在odbc上,这样没有自己的oledb提供者的数据库也可以使用oledb的特点了。
ado: 其实只是一个应用程序层次的界面,它用oledb来与数据库通信。
adox: 对ado的安全性,维护性(如:创建一个数据库)进行了扩展。
2.用odbc连接数据库:
odbc中提供三种dsn,它们的区别很简单:用户dsn只能用于本用户。系统dsn和文件dsn的区别只在于连接信息的存放位置不同:系统dsn存放在odbc储存区里,而文件dsn则放在一个文本文件中。
它们的创建方法就不说了。
在asp中使用它们时,写法如下:
A.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={SQL SERVER};SERVER=servername;UID=xx;PWD=xxx "
B.access:
用系统dsn: connstr= "DSN=dsnname "
(或者为:connstr= "DSN=dsnname;UID=xx;PWD=xxx ")
用文件dsn: connstr= "FILEDSN=xx "
还可以用连接字符串(从而不用再建立dsn):
connstr= "DRIVER={Microsoft Access Driver};DBQ=d:/abc/abc.mdb "
3.用oledb连接数据库:
A.sql server:
connstr= "PROVIDER=SQLOLEDB;
DATA SOURCE=servername;UID=xx;PWD=xxx;DATABASE=dbname "
B.access:
connstr= "PROVICER=MICROSOFT.JET.OLEDB.4.0;
DATA SOURCE=c:/abc/abc.mdb "
4.使用UDL文件:
UDL文件是用来存放数据库连接信息的一个文本文件,有点象文件DSN,不过UDL是针对OLEDB(直接的和面向ODBC的)的。
UDL的创建方法:
右击桌面或资源管理器-》新建-》microsoft数据连接
其中的设置工作应该比较清楚了。
UDL的用法:
connstr= "file name=e:/abc/abc.udl "
- ado,odbc,ole等数据库连接技术小析
- ODBC,BDE,ADO,COM,OLE等概念
- ADO ,OLE DB ,ODBC
- ODBC, OLE DB, ADO
- ODBC OLEDB ADO等数据库访问技术
- ADO、OLE DB、ODBC 关系
- 常用数据库连接方式 ODBC,ADO 等 | from web
- ADO、DAO、ODBC、RAO和OLE DB等概念及异同
- OLE DB, ADO, ODBC 区别与联系
- 笔记:ODBC、OLE DB和ADO
- ODBC、OLE DB、 ADO的区别
- ODBC、OLE DB、 ADO的区别
- ODBC、OLE DB、 ADO的区别
- ADO、DAO、ODBC、OLE DB 区别
- ODBC、OLE DB、 ADO的区别
- ODBC、OLE DB、 ADO的区别
- ODBC,OLE-DB,ADO.NET区别
- ODBC ADO ADO OLEDB 数据库连接方式区别
- 查询数据库现在几个用户在连接
- 软件测试用例的认识误区介绍
- 智能人机交互
- VB.net使用多线程与委托解决时间延迟的问题
- 社交圈
- ado,odbc,ole等数据库连接技术小析
- C++中DDB与DIB位图 与 BMP文件格式
- 图示ireport中使用javabean作数据源开发基于jasperreports报表过程
- Android模拟器上网问题
- 从 Windows的 粘滞键 看国内外软件行业的社会责任感
- Qt4.5.0内存映射文件示例
- 关于Load Balance出现ViewState异常的解决方案
- 智能人机交互参考文献
- 一读一写无锁队列c++实现