ADO数据库访问技术.ppt

上传人:za****8 文档编号:14453251 上传时间:2020-07-21 格式:PPT 页数:35 大小:299.81KB
返回 下载 相关 举报
ADO数据库访问技术.ppt_第1页
第1页 / 共35页
ADO数据库访问技术.ppt_第2页
第2页 / 共35页
ADO数据库访问技术.ppt_第3页
第3页 / 共35页
点击查看更多>>
资源描述
ADO技术介绍,ADO是为Microfoft最新和最强大的数据访问接口OLE DB而设计的,是一个便于使用的应用程序层.OLE DB为任何数据源都提供了高性能的访问,这些数据源包括关系和非关系数据库、电子邮件、文件系统、文本和图形以及自定义业务对象等.ADO在关键的Internet方案中使用最少的网络流量,并且在前端和数据源之间使用最少的层数,所用这些都是为了提供高性能的访问接口.同时ADO使用了与DAO相似的约定和特性,使得它易于学习.,ADO历史,ADO共发布1.0 、 1.5 和2.0三个版本. 第一个版本是RDO的一个功能子集,它的目标是为了帮助开发人员在IIS上建立ASP应用. 第二个版本是随IIS4.0和IE4.0一起发布的.从这个版本开始,ADO开始成为在功能和运作效率上都高出RDO和DAO的数据库界面. 最新版本加入了新技术.ADO 2.0实际上是基于MSADO15.DLL这个动态链接库的,这个库文件的名字虽然和ADO1.5的一样,但是它实现了更新的接口.,ADO2.0新技术,异步操作和事件模型 数据集的持续性 层次化的数据运输,ADO特点概述,第一、易于使用.ADO是高层数据库访问技术,所以相对ODBC来说,具有面向对象的特点.同时ADO对象结构中,对象与对象之间的层次结构不是非常明显,这会给编写数据库程序带来很多便利,比如,在应用程序中如果要使用记录集对象,就不一定要先建立连接会话对象,如果需要就可以直接构造记录集对象.不必特别关心对象的层次机构和构造顺序.,ADO特点概述,第二、可以访问多种数据源。这一点和OLE DB是一样的,使应用程序具有很好的通用性和灵活性。 第三、访问数据源效率高。这是由于ADO本身就是基于OLE DB的接口,自然具有OLE DB的特点。 第四、方便地Web应用。这是由于ADO可以以ActiveX控件的形式出现,这就大大方便了Web应用程序的编制。 第五、技术编程接口丰富。ADO支持VC、VB、VJ以及VBscript和JAVAscript脚本语言。,ADO访问数据库的方法,1.连接到数据源。 2.指定访问数据源的命令,同时可带变量参数或优化执行。 3.执行命令,例如一个SELECT脚本。通常涉及ADO的Command对象或使用 Connection 对象的 Execute 方法。 4.如果此命令使数据按表中行的形式返回(例如SELECT命令),则将这些行存储在易于检查、操作或更改的缓存中。 5.适当情况下,可以把缓存行的更改内容写回数据库中,更新数据源。 6.提供常规方法检测错误,涉及ADO的Error对象。,ADO对象,ADO中包含的对象: 连接对象(Connection) 命令对象(Command) 记录集对象(Recordset) 字段对象(Field) 参数对象(Parameter) 错误对象(Error) 属性对象(Property) 集合(Set) 事件(Event).,连接对象(Connection) 用于表示和数据源的连接,以及处理一些命令和事物.通过它可以从应用程序访问数据源,是交换数据所必须的环境. 命令对象(Command) 执行对数据库的查询,修改数据库结构等操作. 记录集对象(Recordset) 用于处理数据源的映像集.用于修改检索数据. 字段对象(Field) 用于描述数据集中的列信息,包含名称、数据类型和值的属性.要修改数据源中的数据,可以在记录集中修改Field对象的值,对记录集的更改最终送给数据库。,参数对象(Parameter) 用于对传递给数据源的命令赋参数值,在命令执行前进行更改. 错误对象(Error) 用于承载所产生错误的详细信息,如无法建立连接、执行命令等. 属性对象(Property) 通过属性,每个ADO对象借此来让用户描述和控制自身的行为,分为内置和动态两种类型.内置对象是ADO对象的一部分并且随时可用。动态属性则由特别的数据提供者添加到ADO对象的属性集合中,仅在提供者被使用时才能存在。,ADO对象,集合(Set) 集合是一种可以方便的包含其他特殊类型对象的对象类型.ADO提供四种类型的集合: Connection对象具有Errors集合。 Command对象具有Parameters集合。 Recordset对象具有Fields集合。 Connection Command、 Recordset Field对象具有Properties集合。,ADO对象,事件(Event) 事件模型是异步操作的基础。这是ADO2.0引进的新特性。事件由事件处理程序例程处理,该例程在某个操作开始之前或结束之后被调用。某些事件是成对出现的。开始操作前调用的事件名格式为 WillEvent(Will 事件),而操作结束后调用的事件名格式为 EventComplete(Complete 事件)。 其余的不成对事件只在操作结束后发生。(其名称没有任何固定模式。) 事件处理程序由状态参数控制。附加信息由错误和对象参数提供。,ADO事件是由某些操作在开始之前或结束之后发出的通知;所谓通知,实质上是对预定义的事件处理回调函数的调用。 ADO事件分为两类:ConnectionEvent和RecordsetEvent。前者出现在连接打开、 切断,事务开始提交或命令被执行等与Connection对象有关的操作。后者出现在与记录集对象有关的操作。 若按时间性质来分,ADO事件又可以分为WILL事件、COMPLETE事件和其他事件3类。顾名思义,WILL发生在某个操作之前,COMPLETE发生在某个操作完成之后。,(一)使用Connection对象,方法: Open函数的原型: HRESULT Open( _bstr_t ConnectionString,/连接字符串 _bstr_t UID, /用户名 _bstr_t PWD, /口令 Long option); /可选参数 Close方法用于关闭数据库的连接。,(一)使用Connection对象,属性: ConnectionString :连接字符串,指定用于建立连接数据源的信息。 ConnectionTimeout:指示在终止尝试和产生错误之前执行命令需等待的时间,默认值为30秒。 Mode属性: 指定Connection对象修改数据的权限。Mode 属性只能在关闭 Connection 对象时方可设置。,Mode属性,AdModeUnknown默认值。表明权限尚未设置或无法确定。 AdModeRead表明权限为只读。 AdModeWrite表明权限为只写。 AdModeReadWrite表明权限为读/写。 AdModeShareDenyRead防止其他用户使用读权限打开连接。 AdModeShareDenyWrite防止其他用户使用写权限打开连接。 AdModeShareExclusive防止其他用户打开连接。 AdModeShareDenyNone防止其他用户使用任何权限打开连接。,(一)使用Connection对象,使用 Connection 对象的 Execute 方法,可执行任何在指定连接的 CommandText 参数中传送给该方法的查询。如果 CommandText 参数指定按行返回的查询,执行产生的任何结果将存储在新的 Recordset 对象中。如果命令不是按行返回的查询,则提供者返回关闭的 Recordset 对象。 返回的 Recordset 对象始终为只读、仅向前的游标。如需要具有更多功能的 Recordset 对象,应首先用所需的属性设置创建 Recordset 对象,然后使用 Recordset 对象的 Open 方法执行查询并返回所需游标类型。 CommandText 参数的内容对提供者是特定的,并可以是标准的 SQL 语法或任何提供者支持的特殊命令格式。,CommandText 参数赋值,可为下列值之一。 adCmdText指示提供者应将 CommandText 赋值为命令的文本定义。 adCmdTable指示 ADO 应生成 SQL 查询以便从 CommandText 命名的表中返回所有行。 adCmdTableDirect指示提供者应从 CommandText 命名的表中返回所有行。 adCmdTable指示提供者应将 CommandText 赋值为表名。 adCmdStoredProc指示提供者应将 CommandText 赋值为存储过程。 adCmdUnknown指示 CommandText 参数中的命令类型未知。 adExecuteAsync指示命令应该异步执行。 adFetchAsync指示 CacheSize 属性指定的初始数量之后的行应异步提取。,(一)使用Connection对象,使用事务 在数据库里,事务的概念可以把多个操作作为单一的基本活动来进行。在所有的操作开始之前调用Connection对象的BeginTrans方法来开始一个事物。 所有的操作成功 之后,调用Connection对象的CommitTrans方法提交事物。这时数据库的内容才做了实质性的改变; 如果中途出现异常,则在异常处理处使用RollBackTrans取消这次事物,数据库将回到事务前的状态。,(二)使用Recordset对象,记录集对象是ADO中最常用的对象,表示来自基本表或命令执行结果的记录全集。 ActiveConnection属性 通过设置ActiveConnection属性使打开的连接与Command对象关联。 AbsolutePosition属性 指定Recordset对象当前记录的序号位置。,(二)使用Recordset对象,BOF、EOF属性 这两个属性用来判断记录指针是否越界。 BOF、EOF为真时不能从结果集中读取数据,否则会产生错误。 打开 Recordset 时,当前记录位于第一个记录(如果有记录),并且 BOF 和 EOF 属性被设置为 False。如果没有记录,BOF 和 EOF 属性设置是 True。,(二)使用Recordset对象,MaxRecord属性 指定通过查询返回的记录最大数目。 RecordCount属性 返回RecordSet对象中记录的当前数目。 Move属性 在记录集中移动指针。假设提供者支持相关的功能,可以使用 MoveFirst、MoveLast、MoveNext 和 MovePrevious 方法以及 Move 方法,和 AbsolutePosition、AbsolutePage 和 Filter 属性来重新确定当前记录的位置。仅向前 Recordset 对象只支持 MoveNext 方法。当使用 Move 方法访问每个记录(或枚举 Recordset)时,可使用 BOF 和 EOF 属性查看是否移动已经超过了 Recordset 的开始或结尾。,(二)使用Recordset对象,Open方法: recordset.Open (Source, ActiveConnection, CursorType, LockType, Options),参数 Source可选,变体型,可以是 Command 对象的变量名、SQL 语句、表名、存储过程调用或持久文件名。 ActiveConnection可选。变体型,可以是有效 Connection 对象变量名;或字符串,指明连接目标的字符串 ConnectionString 参数。 CursorType可选,CursorTypeEnum 值,确定提供者打开 Recordset 时应该使用的游标类型。可为下列常量之一。,CursorType 属性 在打开 Recordset 之前设置 CursorType 属性来选择游标类型,或使用 Open 方法传递 CursorType 参数。部分提供者不支持所有游标类型。请检查提供者的文档。 adOpenForwardOnly(默认值)打开仅向前类型游标。除仅允许在记录中向前滚动之外,其行为类似动态游标。这样,当需要在 Recordset 中单程移动时就可提高性能。 adOpenKeyset打开键集类型游标。其行为类似动态游标,不同的只是禁止查看其他用户添加的记录,并禁止访问其他用户删除的记录,其他用户所作的数据更改将依然可见。它始终支持书签,因此允许 Recordset 中各种类型的移动。 adOpenDynamic打开动态类型游标。用于查看其他用户所作的添加、更改和删除,并用于不依赖书签的 Recordset 中各种类型的移动。如果提供者支持,可使用书签。 adOpenStatic打开静态类型游标。提供记录集合的静态副本以查找数据或生成报告。它始终支持书签,因此允许 Recordset 中各种类型的移动。其他用户所作的添加、更改或删除将不可见。这是打开客户端 (ADOR) Recordset 对象时唯一允许使用的游标类型。,参数 LockType可选。确定提供者打开 Recordset 时应该使用的锁定(并发)类型的 LockTypeEnum 值,可为下列常量之一。 adLockReadOnly(默认值)只读 不能改变数据。 adLockPessimistic保守式锁定(逐个) 提供者完成确保成功编辑记录所需的工作,通常通过在编辑时立即锁定数据源的记录来完成。 adLockOptimistic开放式锁定(逐个) 提供者使用开放式锁定,只在调用Update 方法时才锁定记录。 adLockBatchOptimistic开放式批更新 用于批更新模式(与立即更新模式相对)。,参数 Options可选,长整型值,用于指示提供者如何识别 Source 参数,如果在 Source 参数中传送的不是 Command 对象,那么可以使用 Options 参数优化 Source 参数的计算。如果没有定义 Options 则性能将会降低,原因是 ADO 必须调用提供者以确定参数为 SQL 语句、存储过程还是表名。如果确知所用的 Source 类型,则可以设置 Options 参数以指示 ADO 直接跳转到相关的代码。如果 Options 参数与 Source 类型不匹配,将产生错误。,Options 参数: adCmdText指示提供者应该将 Source 作为命令的文本定义来计算。 adCmdTable指示 ADO 生成 SQL 查询以便从 Source 命名的表返回所有行。 adCmdTableDirect指示提供者更改从 Source 命名的表返回的所有行。 adCmdStoredProc指示提供者应该将 Source 视为存储的过程。 adCmdUnknown指示 Source 参数中的命令类型为未知。 adCommandFile指示应从 Source 命名的文件中恢复持久(保存的)Recordset。 adExecuteAsync指示应异步执行 Source。 adFetchAsync指示在提取 CacheSize 属性中指定的初始数量后,应该异步提取所有剩余的行。,其他说明: 如果不存在与记录集关联的连接,Options 参数的默认值将为 adCommandFile。这是持久 Recordset 对象的典型情况。 如果数据源没有返回记录,那么提供者将 BOF 和 EOF 属性同时设置为 True,并且不定义当前记录位置。如果游标类型允许,仍然可以将新数据添加到该空 Recordset 对象。 在结束对打开的 Recordset 对象的操作后,可使用 Close 方法释放所有关联的系统资源。关闭对象并非将它从内存中删除,可以更改它的属性设置并在以后使用 Open 方法再次将其打开。要将对象从内存中完全删除,可将对象变量设置为 Nothing。 在设置 ActiveConnection 属性之前调用不带参数的 Open,可通过将字段追加到 Recordset Fields 集合创建 Recordset 的实例。,(二)使用Recordset对象(续),其他方法常用方法还包括: 添加函数AddNew 删除函数Delete 修改函数Update 我们主要都是直接使用SQL语句完成这些功能,而且他们的用法基本和前面讲过的一样,这里就不做详细介绍。,(二)使用Recordset对象(续),对于部分提供者(例如 Microsoft ODBC Provider for OLE DB 连同 Microsoft SQL Server),可以通过使用 Open 方法传递连接字符串,根据以前定义的 Connection 对象独立地创建 Recordset 对象。ADO 仍然创建 Connection 对象,但它不将该对象赋给对象变量。不过,如果正在相同的连接上打开多个 Recordset 对象,就应该显式创建和打开 Connection 对象,由此将 Connection 对象赋给对象变量。如果在打开 Recordset 对象时没有使用该对象变量,即使在传递相同连接字符串的情况下,ADO 也将为每个新的 Recordset 创建新的 Connection 对象。 可以创建所需数量的 Recordset 对象。,(二)使用Recordset对象(续),Recordset 对象可支持两类更新:立即更新和批更新。使用立即更新,一旦调用 Update 方法,对数据的所有更改将被立即写入现行数据源。也可以将值的数组作为参数传递来使用 AddNew 和 Update 方法,同时更新记录的若干字段。 如果提供者支持批更新,可以使提供者将多个记录的更改存入缓存,然后使用 UpdateBatch 方法在单个调用中将它们传送给数据库。这种情况应用于使用 AddNew、Update 和 Delete 方法所做的更改。调用 UpdateBatch 方法后,可以使用 Status 属性检查任何数据冲突并加以解决。 注意要执行不使用 Command 对象的查询,应将查询字符串传递给 Recordset 对象的 Open 方法。但是,在想要保持命令文本并重复执行或使用查询参数时,仍然需要 Command 对象。,(三)使用Command对象,ActiveConnection 属性 通过设置ActiveConnection 属性使打开的连接与Command对象连接。 CommandText属性 定义命令(例如SQL语句)的可执行文本。 Execute方法 执行在CommandText属性中指定的查询、或存储过程。如果CommandText属性指定按行返回查询,执行所产生的结果将存储在新的Recordset对象中。如果该命令不是按行返回查询,则返回关闭的Recordset对象。,(三)使用Command对象,可以使用 Command 对象的集合、方法、属性进行下列操作: 使用 CommandText 属性定义命令(例如,SQL 语句)的可执行文本。 通过 Parameter 对象和 Parameters 集合定义参数化查询或存储过程参数。 可使用 Execute 方法执行命令并在适当的时候返回 Recordset 对象。执行前应使用 CommandType 属性指定命令类型以优化性能。 使用 Prepared 属性决定提供者是否在执行前保存准备好(或编译好)的命令版本。 使用 CommandTimeout 属性设置提供者等待命令执行的秒数。通过设置 ActiveConnection 属性使打开的连接与 Command 对象关联。 设置 Name 属性将 Command 标识为与 Connection 对象关联的方法。 将 Command 对象传送给 Recordset 的 Source 属性以便获取数据。 使用 Command 对象查询数据库并返回 Recordset 对象中的记录,以便执行大量操作或处理数据库结构。取决于提供者的功能,某些 Command 集合、方法或属性被引用时可能会产生错误。,(三)使用Command对象,如果不想使用 Command 对象执行查询,请将查询字符串传送给 Connection 对象的 Execute 方法或 Recordset 对象的 Open 方法。但是,当需要使命令文本具有持久性并重新执行它,或使用查询参数时,则必须使用 Command 对象。 要独立于先前已定义的 Connection 对象创建 Command 对象,请将它的 ActiveConnection 属性设置为有效的连接字符串。ADO 仍将创建 Connection 对象,但它不会将该对象赋给对象变量。但是,如果正在将多个 Command 对象与同一个连接关联,则必须显式创建并打开 Connection 对象,这样即可将 Connection 对象赋给对象变量。如果没有将 Command 对象的 ActiveConnection 属性设置为该对象变量,则即使使用相同的连接字符串,ADO 也将为每个 Command 对象创建新的 Connection 对象。 要执行 Command,只需通过它所关联的 Connection 对象的 Name 属性,将其简单调用即可。必须将 Command 的 ActiveConnection 属性设置为 Connection 对象。如果 Command 带有参数,则将这些参数的值作为参数传送给方法。,
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!