本页使用了标题或全文手工转换

ADO

维基百科,自由的百科全书
跳转至: 导航搜索

微软公司ADOActiveX Data Objects)是一个用于存取数据源的COM组件。它提供了编程语言和统一数据访问方式OLE DB的一个中间层。允许开发人员编写访问数据的代码而不用关心数据库是如何实现的,而只用关心到数据库的连接。访问数据库的时候,关于SQL的知识不是必要的,但是特定数据库支持的SQL命令仍可以通过ADO中的命令对象来执行。

历史[编辑]

ADO被设计来继承微软早期的数据访问对象层,包括RDO(Remote Data Objects)和DAO(Data Access Objects)。ADO在1996年冬被发布。

  • Microsoft Office 2000中发布了ActiveX Data Objects 2.1 Library(MSADO21.TLB)。
  • Microsoft Office 2002中发布了ActiveX Data Objects 2.5 Library(MSADO25.TLB)。引入了Record对象、Stream对象、 URL绑定;并支持识别URL模式的OLE DB provider
    • Microsoft ADO Extensions 2.5 for DDL and Security Library(MSADOX.DLL)包含了下述object与collection:Catalog、Column、Group、Index、Key、Procedure、Property、Table、User object and Users collection、View。
    • Microsoft Jet and Replication Objects 2.5 Library(MSJRO.DLL)包括了Filter object与collection,JetEngine object,Replica object。[1]
  • ActiveX Data Objects 2.6 Library(MSADO26.TLB)引入了CubDef.GetSchemaObject方法、Command流、Dialect属性、Command.Execute方法、Field statusvalues、NamedParameters属性、Resultsets in streams、Single row resultset。
  • ActiveX Data Objects 2.7 Library(MSADO27.TLB)支持64位CPU
  • ActiveX Data Objects 2.8 Library(MSADO28.TLB)于2003年8月随Windows Server 2003操作系统发布,作为Microsoft Data Access Components (MDAC) 2.8的组成部分。未引进任何新特性,但做了很多安全方面的补丁。
  • ADO 6.0 包含在 Windows Vista中,作为Windows Data Access Components (Windows DAC) 6.0的组成部分。功能上ADO 6.0等价于ADO 2.8.

在新的编程框架.NET Framework中,微软也提供了一个面向Internet的版本的ADO,称为ADO.NET。其对象模型和传统ADO差别很大。


版本 发布日期 包括 特性 安全问题
1.0 1996年8月
  • ODBC 3.0
  • OLE DB 1.1
  • ADO 1.0
  • ADC 1.0
  • ODBC drivers for Access/Jet, SQL Server ,Oracle databases

No bulletin发布

1.5 1997年9月
  • Microsoft Internet Explorer 4.0
  • Internet Client SDK 4.0
  • ODBC 3.5
  • OLE DB 1.5
  • ADO 1.5
  • RDS 1.5 (取代ADC 1.0)
Template:Mssb
2.0 1998年7月1日
  • ODBC 3.5 SDK
  • OLE DB 1.5 SDK
  • OLE DB for OLAP Specification
Template:Mssb
2.1 1998年7月11日
  • SQL Server 7.0
  • SQL Server 6.5 SP5
  • ADO 2.1
  • RDS 2.1
  • OLE DB 2.1
  • OLE DB Provider for ODBC, SQL Server and Oracle
  • JRO 2.1
  • ODBC driver
  • Jet driver
  • RDO
Template:Mssb
2.5 2000年2月17日
  • Windows 2000
  • ADO 2.5
  • ADO MD 2.5
  • ADOX 2.5
  • RDS 2.5
  • OLE DB 2.5
  • OLE DB Provider for the ODBC driver for:
    • SQL
    • Server
    • Site Server Search
    • Internet Publishing
    • Jet 4.0 (Access 2000)
    • Oracle
    • Indexing Services (Index Server)
    • Microsoft Data Shaping Services
    • OLAP Services
    • DTS Packages
    • Microsoft Directory Services
    • Server DTS Flat File
    • OLE DB Simple Provider
  • JRO 2.5
  • ODBC 3.51
  • an ODBC driver for
    • Microsoft Access
    • SQL Server
    • Microsoft Excel
    • Text
    • Visual FoxPro
    • FoxPro VFP
    • dBase
    • dBase VFP
    • Paradox
    • Oracle
  • Jet drivers for:
    • Excel
    • Microsoft Exchange
    • Access
    • text files
    • Lotus 1-2-3
    • Paradox
    • xBase
Template:Mssb
2.6 2000年9月
  • SQL Server 2000
Not included (manually installed):
  • Microsoft Jet
  • Microsoft Jet OLE DB Provider
  • ODBC Desktop Database Drivers
Template:Mssb
2.7 2001年10月
  • Windows XP
  • 支持64位系统
2.8 2003年8月
  • Windows Server 2003

bug修复

2.8 SP1 2005年5月
  • SQL Server 2000 SP4
  • Windows XP SP2

bug修复

2.8 SP2 2005年3月
  • Windows Server 2003 SP1
9.0 从未发布
  • Visual Studio 2005 Beta 1
  • SQL Server 2005 Beta 1 [2]
Windows DAC 6.0 2006年11月
  • 仅改变了版本号
  • 无新加特性

架構[编辑]

ADO包含12个对象:

  • 连接(Connection),代表到数据库的连接
  • 记录集(Recordset),代表数据库记录的一个集合
  • 命令(Command),代表一个SQL命令
  • 记录(Record),代表数据库的一条记录
  • 流(Stream),代表数据的顺序集合。主要用于RecordSet对象,用于读写字节流。常用于把recordset保存为XML格式,向OLE DB provider发送命令文本(替代CommandText对象),包含二进制或文本内容。
  • 错误(Error),代表数据库访问中OLE DB提供的错误
  • 字段(Field),代表一个数据库字段
  • 参数(Parameter),代表一个参数,用于SQL或存储过程。
  • 属性(Property),保存对象的信息
  • ImmediateThe recordset is locked using the adLockOptimistic or adLockPessimistic lock.
  • Batch:recordset使用adLockBatchOptimistic上锁。每次Update操作在一个临时buffer中修改数据。当UpdateBatch调用时数据才真正修改回数据库。调用UpdateCancel放弃临时buffer中数据。
  • Transaction:如果OLE DB允许事务操作,则BeginTrans、CommitTrans、RollbackTrans可调用

ADO包含4个collection:

  • Fields
  • Properties
  • Parameters
  • Errors

使用[编辑]

ADO组件的使用需要利用支持COM的高级语言,例如ASP中的VBScript或者Visual Basic,甚至微软的竞争对手Borland的产品Delphi,,现在也支持使用ADO来访问数据库。

使用ADO存取資料的一些基本步驟:

  1. 创建連接物件去連結資料庫(Create a connection object to connect to the database.)
  2. 创建记录集物件來取得資料(Create a recordset object in order to receive data in.)
  3. 打开連接(Open the connection)
  4. 在记录集中完成SQL語法的描述(Populate the recordset by opening it and passing the desired table name or SQL statement as a parameter to open function.)
  5. 对获取的数据进行搜索/处理操作。
  6. 確定改變資料(Commit the changes you made to the data (if any) by using Update or UpdateBatch methods.)
  7. 關閉记录集(Close the recordset)
  8. 關閉連接(Close the connection)

ASP範例[编辑]

下列的ASP範例使用ADO於"Phonebook"表中選取"Name"欄位,其中"PhoneNumber"等於"555-5555"。

dim myconnection, myrecordset, name
set myconnection = server.createobject("ADODB.Connection")
set myrecordset = server.createobject("ADODB.Recordset")

myconnection.open mydatasource
myrecordset.open "Phonebook", myconnection
myrecordset.find "PhoneNumber = '555-5555'"
name = myrecordset.fields.item("Name")
myrecordset.close

set myrecordset = nothing
set myconnection = nothing

這相當於下列的ASP code,以plain SQL取代Recordset object:

dim myconnection, myrecordset, name
set myconnection = server.createobject("ADODB.connection")
myconnection.open mydatasource
set myrecordset = myconnection.execute("SELECT Name FROM Phonebook WHERE PhoneNumber = '555-5555'")
name = myrecordset(0)

C语言例子[编辑]

  AfxOleInit();//COM库的初始化 
#import   "c:\program files\common files\system\ado\msado15.dll "   no_namespace   rename( "EOF ", "adoEOF ") //系统生成msado15.tlh,ado15.tli两个头文件来定义ADO库
  _ConnectionPtr   m_pConnection; //指向Connection对象的指针
  HRESULT   hr; 
  hr   =   m_pConnection.CreateInstance( "ADODB.Connection ");///创建Connection对象 
  if(SUCCEEDED(hr))   
  {   //连接数据库:
      hr   =   m_pConnection-> Open( "Provider=Microsoft.Jet.OLEDB.4.0;Data   Source=test.mdb ", " ", " ",adModeUnknown); //未设置第二个参数UserID、第三个参数Password         
  } 
      //上面一句中连接字串中的Provider是针对ACCESS2000环境的,对于ACCESS97,需要改为:Provider=Microsoft.Jet.OLEDB.3.51; 
       /*第四个参数Options可以取值为: 
       adModeUnknown:缺省。当前的许可权未设置 
        adModeRead:只读 
        adModeWrite:只写 
        adModeReadWrite:可以读写 
        adModeShareDenyRead:阻止其它Connection对象以读权限打开连接 
        adModeShareDenyWrite:阻止其它Connection对象以写权限打开连接 
        adModeShareExclusive:阻止其它Connection对象打开连接 
        adModeShareDenyNone:允许其它程序或对象以任何权限建立连接 */

参考文献[编辑]

  1. ^ MSDN KB283115: List of references that you must set when you work with Access 2002
  2. ^ Chapter 11 Changes, supplementary material to "A First Look at SQL Server 2005 for Developers" by Bob Beauchemin, Niels Berglund, and Dan Sullivan.[失效連結]

外部链接[编辑]

Wikibooks-logo.svg
您可以在維基教科書中查找此百科条目的相關電子教程:

參見[编辑]


数据库管理系统(DBMS) 查看 · 讨论 · 编辑

概念
数据库 · 数据模型 · 数据库存储结构英语Database storage structures · 关系 (数据库) · 关系模型 · 分布式数据库 · ACID ( 原子性英语Atomicity (database systems) · 一致性· 隔離性· 持久性英语Durability (database systems) ) · Null值
关系数据库 · 关系模型 · 数据库规范化 · 數據庫完整性 · 實體完整性 · 參照完整性英语Referential integrity · 关系数据库管理系统 
主键 · 外键 · 代理键 · 超键 · 候选键 

数据库组件
触发器 · 视图 · 数据库表 · 指标 (数据库) · 事务日志英语Transaction log · 数据库事务 · 并发控制 · 乐观锁 · 悲观锁 · 数据库索引 
存储程序 · 資料庫分割英语Partition (database)

SQL
分类: 数据查询语言(DQL) - 資料定義語言(DDL) - 資料操縱語言(DML) - 資料控制語言(DCL)
指令:SELECT · INSERT · UPDATE · MERGE · DELETE · JOIN · UNION英语Union (SQL) · CREATE · DROP · Begin work · COMMIT · ROLLBACK · TRUNCATE · ALTER
安全: SQL資料隱碼攻擊 · 參數化查詢

数据库管理系统的实现

实现类型
关系数据库 · 檔案型資料庫 · Deductive · 維度化資料庫 · 階層式 · 圖形資料庫 · NoSQL· 对象数据库 · 物件關聯式資料庫 · Temporal · XML資料庫

数据库产品
对象型对比) · 关系型对比

数据库组件
数据查询语言 · 查詢最佳化器 · 查詢計畫 · 嵌入式SQL · ODBC · JDBC · OLE DB