资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,开放式数据库开发,数据库原理与应用,开放式数据库开发,1.1 ODBC,1.2,基于,ODBC,接口的编程,1.3,数据库操作对象,ADO,1.1 ODBC,数据库系统开发的,API,作用,DB SQL API,的发展演变,调用级接口,CLI(Call Level Interface),背景:,SQL,语言之标准化,不同数据库的互操作要求,是,SQL API,的规范核心:为应用开发的实现提供了统一的行业的规范,由,Oracle,、,Sybase,、,Lotus,、,Ingres,、,Informix,、,HP,、,DEC,等提出了,(20,世纪,80,年末,),局限性:没有统一产品,(,和,DBMS,的捆绑,),ODBC(Open Database Connectivity),微软公司于,1991,年,11,月宣布,ODBC,技术,基于,CLI,的规范要求,更具先进性和开放性,得到广泛的支持,成为事实的标准,基于ODBC数据库应用系统的组成部件,应用程序,(Application),使用,ODBC,接口的应用程序可执行的任务包括调用,ODBC,函数、递交语句给,DBMS,、获取结果并进行处理,它负责,ODBC,外部工作。,驱动程序管理器,(Driver Manager),remark,由微软提供的驱动程序管理器是带有输入库的动态连接库,ODBC.DLL,,通过装入方式实现应用程序和各种数据库系统,(SQL Server,、,Oracle,、,DB2,等,),驱动程序的连接和交互。,驱动程序,(Driver),驱动程序是实现,ODBC,函数和数据源交互的,DLL,,当应用程序调用,SQL Connect,或者,SQL Driver Connect,函数时,由驱动程序管理器装入相应的驱动程序,驱动程序对来自应用程序的,ODBC,函数调用进行应答,按照其要求执行任务。,图,10.6,:基于,ODBC,实现的数据库应用系统的分层结构,1.2 基于ODBC接口的编程,编程的具体步骤,编程实现的具体步骤示意及其说明如下图,:,1.3,数据库操作对象,ADO,ADO(Active-X Data Object),是一个由,Microsoft,提供的先进而强大的数据访问之对象化编程模型,ADO,是数据访问技术演变过程的标志性技术,为了说明,ADO,的实质,需要了解其发展的历史背景,1,、,Microsoft,数据访问的演变过程,DAO,和,RDO,由,C,语言开发的,ODBC,使用了低层接口,其中利用了指针的访问特点,适合于指针特性的语言类别如,C,和,C+,的应用开发,其他语言如,Visual Basic,在其,6.0,版本之前,开发人员不能直接进行,ODBC,的编程,而是采用,DAO,或者,RDO,的数据访问技术。,Jet,引擎,应用程序,ACCESS,数据库,非,ACCESS,数据库,ODBC,驱动程序,图,10.8 DAO,对象数据库的访问路线,DAO,数据访问,DAO,针对,Access,而设计。可见,使用,DAO,是连接,Access,数据库最快速、最有效的方法。,对于非,Access,数据库,(,例如,,SQL Server,和,Oracle,等,),的访问,需借助,ODBC,的中介处理,RDO,DAO,缺点:对于,non-access,,由于额外的解释处理环节,令数据访问的性能受到较大的损害,RDO,机制:绕开,Jet,引擎而直接使用,ODBC API,访问,是一种直接对,ODBC API,的对象化封装,具有适用于多种语言的友好编程接口,RDO,直接继承了,ODBC,的高性能特性,相对,Jet,引擎封装,ODBC,的情形,,RDO,的数据库访问性能得到显著的改善,(,对于非,Access),。,RDO,的访问机制示意,OLE DB,ODBC,的局限性:,ODBC,的技术不能集成基于除关系模型以外的其它数据模型的数据对象,如不能访问不使用,SQL,的非关系数据源(例如,不按照关系存储数据的电子邮件如,Microsoft Exchange Server,、目录服务如,LDAP,等)中的数据。,OLE,是,Microsoft,的万能数据访问策略,为万能数据访问提供通用接口,它用来表示任何数据源的数据。,OLE DB的要点,在,ODBC,基础上,结合,OLE,的万能数据接口技术,OLE DB,访问技术,OLE DB,使得各类数据的统一标准化访问成为现实,实现对广泛数据对象的集成访问。,ADO,和,ODBC,类似,,OLE DB,支持指针、数据结构和直接内存分配,因此它只是提供了,C,和,C+,程序员及使用其他包含,C,样式函数调用语言的程序员对应的调用样式,(,绑定,),。,对于大部分的语言(例如,VB,和,VBScript,、,Java,)不提供指针数据类型(地址变量),因此,这些语言不能使用,C,样式绑定,而且不能直接调用,OLE DB,。,ADO,的提出,在,OLE DB,的基础上,,Microsoft,推出了另一个数据访问对象模型:,ADO,。,ADO,采用类似于,RDO,对象对,ODBC,的封装关系机制,实现对,OLE DB,的封装,且提供比,RDO,更简单的对象模型,OLE DB,的数据访问机制示意图:,OLE DB,提供者,ODBC,ADO,关系数据库,邮件系统,目录服务,关系数据库,VB/VBScript,Delphi,C/C+/C#,Java,2,、,ADO,对象模型及其主要对象简介,对象,描述,Connection,用来建立数据源和,ADO,程序之间的连接,它代表与一个数据源的唯一对话。包含了有关连接的信息。例如:游标类型、连接字符串、查询超时、连接超时和默认数据库,Recordset,查询得到的一组记录组成的记录集,Field,包含了记录集中的某一个记录字段的信息。字段包含在一个字段集合中。字段的信息包括数据类型、精确度和数据范围等,Command,包含了一个命令的相关信息,如查询字符串、参数定义等。可以不定义一个命令对象而直接在一个查询语句中打开一个记录集对象,Parameter,与命令对象相关的参数。命令对象的所有参数都包含在它的参数集合中,可以通过对数据库进行查询来自动创建,ADO,参数对象,Property,ADO,对象的属性。,ADO,对象有两种类型的属性:内置属性和动态生成的属性。内置属性是指在,ADO,对象里面的那些属性,任何,ADO,对象都有这些内置属性;动态属性由底层数据源定义,并且每个,ADO,对象都有对应的属性集合,Error,包含了由数据源产生的,Errors,集合中的扩展的错误信息。由于一个单独的语句会产生一个或多个错误,因此,Errors,集合可以同时包括一个或多个,Error,对象,ADO,对象模型简要说明:,3,、基于,ADO,的,VB6,编程,基于,ADO,的,VB6,编程步骤大致如下:,连接数据源,(connection),;或者开始一个事务(,Transaction,)。,可选择创建表示,SQL,查询命令的对象,(connection,、,command,、,recordset),。,可选择在,SQL,命令中将值指定为变量参数,(parameter),。,执行命令。如果命令以行,(,记录,),返回,将行存储在存储对象中,(recordset),。,可选择对数据进行定位、检查、操作和编辑,(recorset),。,适当情况下,可以使用存储对象中的变更对数据源进行更新。可选择在事务处理中嵌入更新数据,(Recordset.update,、,Recordset.BatchUpdate,、,connection.BeginTrans),。,在使用事务之后,可以接受或拒绝在事务中所做的更改,(connection.CommitTrans,、,connection.RollbackTrans),。,使用,ADO,技术的,vb6,编程例子,该例子在客户端编辑数据集,使用乐观锁定、开放式批更新功能和事务机制以及记录客户端数据的,XML,格式。,作为演示,本程序的错误逻辑没有严格处理,注意:,VB6,中利用,ADO,编程时,在,VB6 IDE,中先要引入,ADO,对象库。,程序清单,10.,2,基于,ADO,的,VB6,程序,Dim cnn1 As ADODB.Connection,Dim rstStudent As ADODB.Recordset,Dim strCnn As String,Dim i As Integer,使用学生表中的数据打开记录集。,Set cnn1=New ADODB.Connection,strCnn=Provider=sqloledb;&_,Data Source=localhost;Initial Catalog=,学生选课,;User Id=sa;Password=sa;,cnn1.Open strCnn,Set rstStudent=New ADODB.Recordset,Set rstStudent.ActiveConnection=cnn1,rstStudent.CursorType=adOpenKeyset,rstStudent.LockType=adLockBatchOptimistic,1=2,条件表示空记录,用于数据插入,rstStudent.Open select*from s where 1=2,adCmdText,显示不同编辑状态下的,EditMode,属性。,For i=0 To 4,rstStudent.AddNew,rstStudent!snum=S9999&i,rstStudent!sname=tmpname&i,rstStudent!sbirth=Now(),EditModeOutput After AddEdit:&i,rstStudent.EditMode,Next i,FileSystem.Kill App.Path&adodemo.xml,客户端记录集,XML,格式表示,需要,ADO 2.5,以上,利用,cnn1.Version,属性控制该功能的使用,rstStudent.Save App.Path&adodemo.xml,adPersistXML,cnn1.BeginTrans ,启用事务机制,rstStudent.UpdateBatch ,批更新,cnn1.CommitTrans,rstStudent.Close,cnn1.Close,删除新记录,控制删除可以测试事务处理的机制。,For i=0 To 4,cnn1.Execute DELETE FROM s WHERE snum=S9999&i&,Next i,Exit Sub,MsgBox Err.Description,vbInformation,Error Content,cnn1.RollbackTrans,rstStudent.Close,cnn1.Close,谢谢观看!,数据库原理与应用,
展开阅读全文