补充1:AD0对象编程 1.1ADO基础 1.1.1AD0的介绍 AD0是 ActiveX data0 bject的缩写,它是 Microsoft数据库应用程序开发的新接口,是 Microsoft新的数据访问技术,是建立在 OLE DB 之上的高层数据库访问技术。 AD0被设计用来同新的数据访问层 OLE DB Provider一起协同工作,以提供通用数据访问 Universal Data access)。 OLE DB是一个低层的 数据访问接口,用它可以访问各种数据源,包括传 统的关系型数据库,以及电子邮件系统及自定义的 商业对象 即使对 OLE DB不了解也能轻松使用AD0,因为 它非常简单易用,并不失灵活性。 AD0向VB程序员提供了很多好处,包括易于使 用、熟悉的界面,高速度以及较低的内存占用。同 传统的数据对象层次(①DA0和RD0)不同,ADO可以独 立建立。因此可以只创建一个“ Connection”对象 但是可以有多个,独立的“ Recordset”对象来使 用它,另外AD0针对客户/服务器以及Web应用程 序作了优化
补充 1:ADO 对象编程 1.1ADO 基础 1.1.1 ADO 的介绍 ADO 是 ActiveX Data Object 的缩写,它是 Microsoft 数据库应用程序开发的新接口,是 Microsoft 新的数据访问技术,是建立在 OLE DB 之上的高层数据库访问技术。 ADO 被设计用来同新的数据访问层 OLE DB Provider 一起协同工作,以提供通用数据访问 (Universal Data Access)。OLE DB 是一个低层的 数据访问接口,用它可以访问各种数据源,包括传 统的关系型数据库,以及电子邮件系统及自定义的 商业对象 即使对 OLE DB 不了解也能轻松使用 ADO,因为 它非常简单易用,并不失灵活性。 ADO 向 VB 程序员提供了很多好处,包括易于使 用、熟悉的界面,高速度以及较低的内存占用。同 传统的数据对象层次(DAO 和 RDO)不同,ADO 可以独 立建立。因此可以只创建一个“Connection”对象, 但是可以有多个,独立的“Recordset”对象来使 用它,另外 ADO 针对客户/服务器以及 Web 应用程 序作了优化
AD0最基本的操作流程:初始化COM库,引入 AD0库定义文件;用 Connection对象连接数据库; 利用建立好的连接,通过 Connection、 Command对 象执行SQL命令,或利用 Recordset对象取得结果 记录集进行查询、处理;使用完毕后关闭连接释放 对象。 1.1.2AD0的对象 数据库连接对象- Connection 这是AD0的最大特点。每一次引用数据库可以 建立一个连接对象,然后在其之上建立多个 RecordSet对象,方便远程连接的操作。 建立一个 Connection的方法很简单,下面例 子主要介绍了 Connection对象的创建、连接数据 库以及关闭连接的方法: Sub ConnectionExampleo Dim cnn as adodb connection Set cnn=new adodB. connection 通过 ODBC DSN打开数据库 cnn.open“pubs”,"”sa”,”” 检査是否成功建立连接对象 if cnn. state=adStateOpen then msgbox“ Welcome to pubs!” else msgbox orry, no pubs
ADO 最基本的操作流程:初始化 COM 库,引入 ADO 库定义文件;用 Connection 对象连接数据库; 利用建立好的连接,通过 Connection、Command 对 象执行 SQL 命令,或利用 Recordset 对象取得结果 记录集进行查询、处理;使用完毕后关闭连接释放 对象。 1.1.2 AD0 的对象 1. 数据库连接对象——Connection 这是 ADO 的最大特点。每一次引用数据库可以 建 立 一个连接 对 象 ,然后 在其之上建立 多 个 RecordSet 对象,方便远程连接的操作。 建立一个 Connection 的方法很简单,下面例 子主要介绍了 Connection 对象的创建、连接数据 库以及关闭连接的方法: Sub ConnectionExample() Dim cnn as ADODB.connection Set cnn=new ADODB.connection ’通过 ODBC DSN 打开数据库 cnn.open “pubs”,”sa”,”” ’检查是否成功建立连接对象 if cnn.state=adStateOpen then msgbox “Welcome to pubs!” else msgbox “Sorry,no pubs!
end if 关闭连接对象 cnn. close End sub 其重要属性如表1-1所示。 表1-1 Connection对象属性列表 属性 功能 connectioNstring开 Connection时的参数设置。主要有以下几项 Provider、 File Name、Re皿 ote provider、 Remote Server、URL DefaultDatabasel定义 Connection对象的缺省数据库 Provider定义 Connection对象的数据库 OLE DB的提供者,如sQ Server之类 State 挡前状态,只读。主要返回值为 asTate0pen或 adStateExecuting 其重要方法如表1—2所示。 表1-2 Connection对象方法列表 方法 功能 BeginTrans併始一个新的处理事务( Transaction) ollbackTrans做弃当前所有的处理事务并开启一个新的事务 ance 终止当前的数据库操作 ose 关闭释放 Connection,对象 xecute 执行SQL语言,或者查询 Open 打开 Connection对象
end if ’关闭连接对象 cnn.close End sub 其重要属性如表 1—1 所示。 表 1-1 Connection 对象属性列表 属性 功能 ConnectionString 打开Connection时的参数设置。主要有以下几项: Provider、File Name、Remote Provider、Remote Server、URL DefaultDatabase 定义Connection对象的缺省数据库 Provider 定义Connection对象的数据库OLE DB的提供者,如SQL Server之类 State 当 前 状 态 ,只 读 。主 要 返回 值 为adStateOpen 或 adStateExecuting 其重要方法如表 1—2 所示。 表 1-2 Connection 对象方法列表 方法 功能 BeginTrans 开始一个新的处理事务(Transaction) RollbackTrans 放弃当前所有的处理事务并开启一个新的事务 Cancel 终止当前的数据库操作 Close 关闭释放Connection对象 Execute 执行SQL语言,或者查询 Open 打开Connection对象
在建立连接对象后,可以通过conn. Execute 方法执行SQL,实现所需的一切功能。编写数据库 程序时,在修改数据库内容方面,这种方法很方便 而且功能强大。 2.记录集对象一— - Recordset Recordset对象表示的是来自基本表或命令执行 结果的记录全集,任何时候, Recordset对象所指 的当前记录均为集合内的单个记录。 可使用 Recordset对象操作来自提供者的数 据,使用AD0时,通过 Records对象可对几乎所有 数据进行操作。所有 Recordset对象均使用记录(行) 和字段(列)进行构造。由于提供者所支持的功能不 同,某些 Recordset方法或属性有可能无效。 打开 Recordset时,当前记录位于第一个记录 (如果有),并且BOF和EOF属性被设置为 False 如果没有记录,BOF和EOF属性设置是True 假设提供者支持相关的功能,可以使用 Movefirst、 Movelast、 MoveNext和 MovePrevious 方法以及Move方法,和 Absoluteposition、 AbsolutePage和 Filter属性来重新确定当前记录 的位置
在建立连接对象后,可以通过 conn.Execute 方法执行 SQL,实现所需的一切功能。编写数据库 程序时,在修改数据库内容方面,这种方法很方便 而且功能强大。 2.记录集对象——Recordset Recordset 对象表示的是来自基本表或命令执行 结果的记录全集,任何时候,Recordset 对象所指 的当前记录均为集合内的单个记录。 可使用 Recordset 对象操作来自提供者的数 据,使用 ADO 时,通过 Records 对象可对几乎所有 数据进行操作。所有Recordset对象均使用记录(行) 和字段(列)进行构造。由于提供者所支持的功能不 同,某些 Recordset 方法或属性有可能无效。 打开 Recordset 时,当前记录位于第一个记录 (如果有),并且 BOF 和 EOF 属性被设置为 False。 如果没有记录,BOF 和 EOF 属性设置是 True。 假 设 提 供 者 支 持 相 关 的 功 能 , 可 以 使 用 MoveFirst、MoveLast、MoveNext 和 MovePrevious 方法 以及 Move 方法,和 AbsolutePosition、 AbsolutePage 和 Filter 属性来重新确定当前记录 的位置
Recordset对象可支持两类更新:立即更新和 批更新。 使用立即更新,一旦调用 Update方法,对数 据的所有更改将被立即写入基本数据源。也可以使 用 AddNew和 Update方法将值的数组作为参数传 递,同时更新记录的若干字段。 如果提供者支持批更新,可以使提供者将多个 记录的更改存入缓存,然后使用 UpdateBatch方法 在单个调用中将它们传送给数据库。这种情况应用 于使用 AddNew、 Update和 Delete方法所做的更改。 调用 UpdateBatch方法后,可以使用 Status属性 检查任何数据冲突并加以解决。 3.命令对象—- Command(了解) Command对象也是AD0的特色之一。一般用于 大量数据的操作或者是对数据库表单结构的操作。 Command的重要属性如表1-3所示,重要方法如表 1-4所示。 表1-3 Command对象属性列表 属性 功能 tive Connection指定当前命令对象属于哪个 Connection CommandStream指定提供命令参数的流 ommandtext 指定参数
Recordset 对象可支持两类更新:立即更新和 批更新。 使用立即更新,一旦调用 Update 方法,对数 据的所有更改将被立即写入基本数据源。也可以使 用 AddNew 和 Update 方法将值的数组作为参数传 递,同时更新记录的若干字段。 如果提供者支持批更新,可以使提供者将多个 记录的更改存入缓存,然后使用 UpdateBatch 方法 在单个调用中将它们传送给数据库。这种情况应用 于使用 AddNew、Update 和 Delete 方法所做的更改。 调用 UpdateBatch 方法后,可以使用 Status 属性 检查任何数据冲突并加以解决。 3.命令对象——Command (了解) Command 对象也是 ADO 的特色之一。一般用于 大量数据的操作或者是对数据库表单结构的操作。 Command 的重要属性如表 1-3 所示,重要方法如表 1-4 所示。 表 1-3 Command 对象属性列表 属性 功能 ActiveConnection 指定当前命令对象属于哪个Connection CommandStream 指定提供命令参数的流 CommandText 指定参数
Dialect 指定参数的语法规范 tate ommand对象运行状态 表1-4 Command对象方法列表 方法 功能 ancel 放弃操作 reate Parameter创建参数 Excute 执行参数 4.字段对象-— Field Field对象代表使用普通数据类型的数据的 列。 Recordset对象含有由 Field对象组成的 Fields集合。每个 Field对象对应于 Recordset 中的一列,其重要属性如表1-5所示。 表1-5 Field对象属性列表 属性 功能 ame 返回字段名 pefineSize版回己声明的字段大小 Value 賡查看或更改字段中的数据 actualsize返回给定字段中数据的实际大小 ativeError指示给定 Error对象的、特定提供
Dialect 指定参数的语法规范 State Command对象运行状态 表 1-4 Command 对象方法列表 方法 功能 Cancel 放弃操作 CreateParameter 创建参数 Excute 执行参数 4.字段对象——Field Field 对象代表使用普通数据类型的数据的 列。Recordset 对象含有由 Field 对象组成的 Fields 集合。每个 Field 对象对应于 Recordset 中的一列,其重要属性如表 1-5 所示。 表 1-5 Field 对象属性列表 属性 功能 Name 返回字段名 DefineSize 返回己声明的字段大小 Value 查看或更改字段中的数据 ActualSize 返回给定字段中数据的实际大小 NativeError 指示给定Error对象的、特定提供
者的错误代码 重要方法如表1-6所示。 表1-6 Field对象方法列表 属性 功能 AppendChunk数椐追加到大型文本、二进制数 中 ret Chunk返回大型文本或二进制数据Fiel 对象的全部或部分内容 5.错误集合一— Errors(了解) Error对象包含与单个操作(涉及提供者)有关 的数据访问错误的详细信息。 任何涉及AD0对象的操作都会生成一个或多个 提供者错误。每个错误出现时,一个或多个Eror 对象将被放到 Connection对象的 errors集合中。 当另一个AD0操作产生错误时, Errors集合将被 清空,并在其中放入新的 Error对象集。 每个 Error对象都代表特定的提供者错误而不 是AD0错误,AD0错误被记载到运行时例外处理机 制中。例如,在 MicrosoftⅥ isual basic中,产 生特定AD0的错误将触发0 n error
者的错误代码 重要方法如表 1-6 所示。 表 1-6 Field 对象方法列表 属性 功能 AppendChunk 将数椐追加到大型文本、二进制数 据中 GetChunk 返回大型文本或二进制数据Field 对象的全部或部分内容 5.错误集合——Errors(了解) Error 对象包含与单个操作(涉及提供者)有关 的数据访问错误的详细信息。 任何涉及 ADO 对象的操作都会生成一个或多个 提供者错误。每个错误出现时,一个或多个 Error 对象将被放到 Connection 对象的 Errors 集合中。 当另一个 ADO 操作产生错误时, Errors 集合将被 清空,并在其中放入新的 Error 对象集。 每个 Error 对象都代表特定的提供者错误而不 是 ADO 错误,ADO 错误被记载到运行时例外处理机 制中。例如,在 Microsoft Visual Basic 中,产 生特定 AD0 的错误将触发 On Error
事件并出现在Err对象中。 Error的主要属性如表 1-7所示。 表1-7 Error对象属性列表 属性 功能 pescription包含错误的文本 umber 包含错误常量的长整型数目 Source 标识产生错误的对象。在向数据源发 出请求之后,如果ror集合中有多 个Erro对象,则将会用到该属性 SQLState推示给定Bror对象的s状态 NativeError指不给定 Errorr对象的、特定提供者 的错误代码 出现提供者错误时,Eror对象将被放在 Connection对象的 Error集合中。AD0支持由单个 AD0操作返回多个错误,以便显示特定提供者的错 误信息。要在错误处理程序中获得丰富的错误信 息,可使用相应的语言或所在工作环境下的错误捕 获功能,然后使用嵌套循环枚举出 Errors集合的 每个 Error对象的属性。 Errors集合的重要方法如表1-8所示。 表1-8 Error集合的方法列表
事件并出现在 Err 对象中。Error 的主要属性如表 1-7 所示。 表 1-7 Error 对象属性列表 属性 功能 Description 包含错误的文本 Number 包含错误常量的长整型数目 Source 标识产生错误的对象。在向数据源发 出请求之后,如果Errors集合中有多 个Error对象,则将会用到该属性 SQLState 指示给定Error对象的sQL状态 NativeError 指不给定Errorr对象的、特定提供者 的错误代码 出现提供者错误时,Error 对象将被放在 Connection 对象的 Error 集合中。ADO 支持由单个 ADO 操作返回多个错误,以便显示特定提供者的错 误信息。要在错误处理程序中获得丰富的错误信 息,可使用相应的语言或所在工作环境下的错误捕 获功能,然后使用嵌套循环枚举出 Errors 集合的 每个 Error 对象的属性。 Errors 集合的重要方法如表 1-8 所示。 表 1-8 Error 集合的方法列表
方法 功能 lear删除集合中的所有对象 team根据名称或序号返回集合的特定成员 2用AD0对象操纵数据库 在使用AD0对象操作数据库时,主要采取如下的 步骤和方法: ·打开数据库。首先需要创建数据库连接对象 ( connection),然后调用该对象的0pen方法即可 打开数据库。 操作数据库数据。在数据库打开之后,通过 Connection、 Command对象执行SQL命令,或者创 建记录集( Recordset)对象,使用该对象的各种方 法就可以进行数据库数据的查询、定位以及增加、 删除和修改。 ·关闭数据库。使用上面创建的数据库连接对象 的 close方法就可以进行数据库的关闭 下面就分别详细介绍以上所说的各个步骤和方 法 1.2.1AD0连接数据库 连接到ODBC数据源 当前使用的所有DBMS(数据库管理系统)系统
方法 功能 Clear 删除集合中的所有对象 Item 根据名称或序号返回集合的特定成员 1.2 用 ADO 对象操纵数据库 在使用 ADO 对象操作数据库时,主要采取如下的 步骤和方法: ·打开数据库。首先需要创建数据库连接对象 (connection),然后调用该对象的 Open 方法即可 打开数据库。 ·操作数据库数据。在数据库打开之后,通过 Connection、Command 对象执行 SQL 命令,或者创 建记录集(Recordset)对象,使用该对象的各种方 法就可以进行数据库数据的查询、定位以及增加、 删除和修改。 ·关闭数据库。使用上面创建的数据库连接对象 的 close 方法就可以进行数据库的关闭。 下面就分别详细介绍以上所说的各个步骤和方 法。 1.2.1 AD0 连接数据库 1.连接到 ODBC 数据源 当前使用的所有 DBMS(数据库管理系统)系统
实际上都可以通过ODBC进行访问。 Microsoft odbc provider允许ADo连接到任 何ODBC的数据源。ODBC驱动程序对于当今使用的 各种主要DBMS都有效,包括 Microsoft SQL Server、 Microsoft access( Microsoft Jet数据 库引擎)和 Microsoft foxpro以及诸如0 racle等 非 Microsoft数据库产品。 要连接 Microsoft odbc provider,就需要将 连接字符串属性( ConnectionString)的参数 “ Provider=”设置为: MSDASQL,可以省略 roⅴ1der 参数。 可以使用或不使用预定义的数据源名DSN或 fileDS进行连接。 带有DSN或 FileDS的语法如下 [Provider=MSDASQL; ](DSN=name FileDSN=filename] [DATABASE=database; UID=user: PWD=password" 无DSN(非DSN连接)的语法如下: [Provider-MSDASQL; DRIVER=driver; SErVER=server DATABASE=database; UID=user; PWD-password" 如果使用DSN或 fileDs,则必须通过 “ Windows控制面板”中的“ODBC管理器”进行定 义。作为设置DSN的替换方法,可以指定ODBC的
实际上都可以通过 ODBC 进行访问。 Microsoft ODBC Provider 允许 ADO 连接到任 何 ODBC 的数据源。ODBC 驱动程序对于当今使用的 各种主要 DBMS 都 有 效 , 包括 Microsoft SQL Server、Microsoft Access(Microsoft Jet 数据 库引擎)和 Microsoft FoxPro 以及诸如 Oracle 等 非 Microsoft 数据库产品。 要连接 Microsoft ODBC Provider,就需要将 连 接 字 符 串 属 性 (ConnectionString) 的 参 数 “Provider=” 设 置 为 : MSDASQL , 可 以 省 略 Provider 参数。 可以使用或不使用预定义的数据源名(DSN)或 FileDSN 进行连接。 带有 DSN 或 FileDSN 的语法如下: “ [Provider=MSDASQL ; ]{DSN=name| FileDSN=filename} ; [DATABASE=database;] UID=user;PWD=password” 无 DSN(非 DSN 连接)的语法如下: “ [Provider=MSDASQL ; ] DRIVER=driver ; SERVER=server ; DATABASE=database;UID=user;PWD=password” 如 果 使 用 DSN 或 FileDSN ,则必须通过 “Windows控制面板”中的“ODBC管理器”进行定 义。作为设置 DSN 的替换方法,可以指定 ODBC 的