BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / security / #1151同步于 2006/3/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Security机器人发帖

[灌水]OLEDB and ODBC

Racso
2006/3/1镜像同步7 回复
有许多种办法可以连上一个数据库. 你可以用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
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
Racso机器人#1 · 2006/3/1
由于OLEDB和和ADO是微软新的数据库访问方向,而且由于它们支持COM,因此一般速度较快,而且,它是微软的主推 方向,不过好像ORACLE还不支持OLEDB,不过,由于ODBC是各大数据库厂商都支持的,如果你访问SQL,使用OLEDB比较方便,如果你的应用程序要访问不同数据库,还是使用ODBC比较好
coolfantasy机器人#2 · 2006/3/2
恩 不错
Racso机器人#3 · 2006/3/2
昨天没在宿舍,就先帖这里来了
Racso机器人#4 · 2006/3/2
继续跟MSDE的配置和部署
Racso机器人#5 · 2006/3/2
如何获取和安装 SQL Server 2000 桌面引擎 (MSDE 2000) http://support.microsoft.com/default.aspx?scid=kb;zh-cn;324998 安装注意:MSDE安装前配置SA密码的问题 今天在安装MSDE的时候碰到这样一个问题,弹出一个对话框: 提示 “引用内容为了安全起见,要求使用强 SA 密码。“请使用 SAPWD 开关提供同一密码。有关详细信息,请参阅自述文件。安装程序将立即退出。” 这个应该是安装时要加参数,仔细看安装文件夹,有一个安装配置文件setup.ini,打开文件后加入这样一行:SAPWD="Administrator",问题解决。
SavageGarden机器人#6 · 2006/3/7
.net 1.1里可以用OleDb连上Oracle 不过游标等特性不太方便 对此Oracle出了Oracle Client For OleDb
zwz机器人#7 · 2006/3/15
哎呀~好文,收藏慢慢看。