第 15 章 用 ado 操作 sql server 数据库
DESCRIPTION
第 15 章 用 ADO 操作 SQL Server 数据库. 学习导读 本章主要介绍通过 ADO 访问 SQL Server 数据库的方法。 通过本章的学习,应掌握以下内容: 了解 ADO 用 VB 进行 ADO 编程的方法. 第 15 章 用 ADO 操作 SQL Server 数据库. 访问 Microsoft 数据库的方式: 直接利用网络编程实现对 SQL Server 命名管道或者 TCP/IP Socket ODBC DAO (数据访问对象), DAO 使用了一个独立的数据库引擎 Jet ,主要面向于桌面应用 - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/1.jpg)
1
第 15 章 用 ADO 操作 SQL Server 数据库
学习导读 本章主要介绍通过 ADO 访问 SQL Server 数据库的方法。通过本章的学习,应掌握以下内容: 了解 ADO
用 VB 进行 ADO 编程的方法
![Page 2: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/2.jpg)
2
第 15 章 用 ADO 操作 SQL Server 数据库
访问 Microsoft 数据库的方式: 直接利用网络编程实现对 SQL Server 命名管道或者 TCP/IP Socket ODBC DAO (数据访问对象), DAO 使用了一个独立的数据库引擎 Jet ,主要面向于桌面应用 RDO (远程数据对象),用于访问远程数据库 ADO ( ActiveX 数据对象),利用统一对象模型进行信息访问,其核心是基于 ActiveX 技术的新的编程接口
![Page 3: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/3.jpg)
3
15.1 ODBC 简介 开放 ODBC ( Open DataBase Connectivity , ODBC )是一个用于访问数据库的统一界面标准。 ODBC 实际上是一个数据库访问库,可以使应用程序直接操作数据库中的数据,具有数据库的独立性。它主要是为访问关系型数据库创建的。
ODBC 提供给应用程序一组操作数据库的统一调用接口( API ), ODBC API 与具体某种 DBMS 的 API 之间的映射过程由 ODBC完成。
ODBC
应用程序 1
应用程序 2
应用程序 n
……
ODBC API
Oracle
DB2
SQL Server
驱动程序提供的 API
![Page 4: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/4.jpg)
4
ODBC 简介 ODBC 通过驱动程序提供了很好的数据库独立性,驱动程序与具体的 DBMS 相关。通过ODBC 开发的应用程序具有很好的可移植性。
使用 ODBC 进行开发的优点:(1) ODBC 的数据库独立性使得应用程序的可移植性好;(2) 可以缩短开发时间,先在单机上开发,再通过调整数据源集成;(3) 可以统一数据库的访问接口,使开发人员更加专注于应用逻辑的处理。
![Page 5: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/5.jpg)
5
ODBC 简介15.1.1 ODBC 的结构 ODBC 主要通过由各数据库厂商提供的驱动程序来提供数据库的独立性。驱动程序用以支持ODBC API 函数调用,通常是一个或者几个 DLL文件。 驱动程序管理器( Driver Manager )用于管理 ODBC API 与驱动程序中提供的 API 之间的绑定( Binding ),驱动程序管理器一般包含在ODBC.DLL 或 ODBC32.DLL 中,可以连接到所有的 ODBC 应用程序中。
![Page 6: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/6.jpg)
6
ODBC 结构示意图
ODBC 应用程序
ODBC 驱动程序管理器
Oracle 的ODBC 驱动
程序
DB2 的ODBC 驱动
程序
SQL Server的 ODBC 驱
动程序……
Oracle数据源 1
Oracle数据源 2
DB2数据源 1
DB2数据源 2
SQL Server
数据源 1
SQL Server
数据源 2
Oracle1 Oracle2 DB2 -1 DB2 - 2SQL
Server 1SQL
Server 2
第 1 层:应用程序调用 ODBC API向数据库发送 SQL 语句并处理结果
第 2 层:管理和装载驱动,将ODBC API 绑定到实际的数据库 API
第 3 层:处理数据库的 API 调用
第 4 层:数据源
![Page 7: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/7.jpg)
7
ODBC 数据源的创建15.1.2 ODBC 数据源的创建 在 Windows 98/NT 下, ODBC 数据源管理器位于控制面板中。在 2000/XP 中位于控制面板的管理工具中。创建 ODBC 数据源的步骤:
(1) 打开“ ODBC 数据源管理器”对话框
![Page 8: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/8.jpg)
8
ODBC 数据源的创建ODBC 数据源管理器:“ 用户 DSN” 、“系统 DSN” 、“文件 DSN” 用来创建数据源。 用户 DSN :创建的数据源只有创建用户可以使用 系统 DSN :创建过程与前者相同,但是整个系统中的用户均可以使用 文件 DSN :把数据源信息保存在一个文件中 驱动程序:列举系统中已经安装的 ODBC 驱动 跟踪:可以建立使用数据源的日志,用于调试 连接池:提供数据源连接句柄的重用
![Page 9: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/9.jpg)
9
ODBC 数据源的创建(2) 进入“系统 DSN” 页面,可以通过“添加”、“删除”、“配置”按钮进行数据源的操作。
![Page 10: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/10.jpg)
10
ODBC 数据源的创建(3) 创建新数据源,对话框中列举了系统已安装的驱动程序。
![Page 11: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/11.jpg)
11
ODBC 数据源的创建(4) 选择 SQL Server 驱动,进入“创建到 SQL Server 的新数据源”对话框。需要输入数据源的名称、描述以及提供数据库服务的主机名,可以直接输入也可以在下拉列表中选择。
![Page 12: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/12.jpg)
12
ODBC 数据源的创建(5) 下一步会出现 SQL Server 认证的输入框,选择准备使用的登录验证方式并按要求输入用户名和密码。
![Page 13: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/13.jpg)
13
ODBC 数据源的创建(6) 选择登录后的默认数据库。
![Page 14: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/14.jpg)
14
ODBC 数据源的创建(7) 在 ODBC 设置对话框,可保持默认选项。
![Page 15: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/15.jpg)
15
ODBC 数据源的创建(8) 点击“完成”会进入 ODBC 设置的确认对话框,可以在这里进行数据源的连接测试。
![Page 16: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/16.jpg)
16
ODBC 数据源的创建(9) 点击“确定”后返回到“系统 DSN” 可以看到新创建的数据源。
![Page 17: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/17.jpg)
17
15.2 ADO
微软公司的 ADO (ActiveX Data Objects) 是一个用于存取数据源的 COM 组件。它提供了编程语言和统一数据访问方式 OLE DB 的一个中间层。允许开发人员编写访问数据的代码而不用关心数据库是如何实现的,而只用关心到数据库的连接。访问数据库的时候,关于 SQL 的知识不是必要的,但是特定数据库支持的 SQL 命令仍可以通过 ADO中的命令对象来执行。 微软也为 ODBC 提供了一种 OLE DB 供应器,使得 ADO 可以访问 ODBC 数据源。
![Page 18: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/18.jpg)
18
ADO 的模型结构15.2.1 ADO 的模型结构 ADO 中包含了一系列的对象和集合。 从 2.0版本后, ADO 模型结构中引入了事件概念,事件( Events )是将要发生或已经发生的操作的通知。用户可以利用事件来进行异步任务的编程。
![Page 19: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/19.jpg)
19
ADO 对象ADO
Connection
Command
RecordSet
Record
Errors Error
Properties Property
Parameters Parameter
Properties Property
Fields Field
Properties Property
Fields Field
Connection :链接对象,提供与数据库的连接信道,允许数据交换;Command :命令对象,嵌入一条 SQL ,用来执行一个操作;Error : ADO产生的错误对象;Field :字段,记录对象中的一列;Parameter : SQL 语句中的参数;Property :属性对象,表示 ADO 对象的某种特性;RecordSet :结果集;Record :代表一行。
![Page 20: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/20.jpg)
20
ADO 集合ADO 模型中的集合集合 说明Errors 为所有 ADO产生的错误建立的对象集合Parameters 与 Command 对象关联的所有 Parameter
对象的集合Fields 与 RecordSet 对象关联的所有字段
( Field )对象的集合Properties 与
Command 、 Connection 、 RecordSet
或 Field 对象关联的所有属性 Property 对象的集合
![Page 21: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/21.jpg)
21
ADO 对象编程的步骤 ADO 的目标是访问、编辑和更新数据源,为完成这一目标所需的步骤如下:(1) 连接到数据源( Connection 对象),并可以有选择地开始一个事务;(2) 创建 Command 对象来执行 SQL 命令;(3) 可以在 SQL 命令中指定列、表和值作为变量参数( Parameter 对象);(4)执行命令( Command 、 Connection 、 RecordSet );(5)如果命令产生按行返回的记录集,则将行存储在缓存中( RecordSet 对象);
![Page 22: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/22.jpg)
22
ADO 对象编程的步骤(6) 可以选择创建缓存视图,对数据进行排序、筛选和定位( RecordSet 对象);(7) 通过添加、删除或更改行和列编辑数据( RecordSet 对象);(8) 在适当情况下,通过在缓存中更改内容来更新数据源( RecordSet 对象);(9)如果使用了事务,可以接受或者拒绝在完成事务期间所作的更改。结束事务( Connection 对象)。
ADO 中的各个对象包含了大量的属性、方法和事件,这些属性、方法和事件在 ADO 的编程中有着重要的作用。
![Page 23: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/23.jpg)
23
Connection 对象15.2.2 ADO 中的 Connection 对象1. Connection 对象的常用属性 Connection 对象是 ADO 对象模型中的顶层对象,表示与数据源的连接。对于数据的访问都是建立在Connection 对象之上的。
(1) Attribute属性 用于设置 Connection 的特性。并非所有的数据提供者都支持这种属性。取值:
adXactCommitRetaining :执行保留的提交,即通过自动调用 CommitTrans启动新事务;adXactAbortRetaining :执行保留的中止,即通过自动调用RollbackTrans启动新事物。
![Page 24: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/24.jpg)
24
Connection 对象的常用属性(2) CommandTimeOut属性 该属性作用于 Connection 和 Command 对象。表示执行一个命令最长可以等待多少时间(以秒计算),超过这个时间限制会终止执行并报告错误,默认值为 30 。如果设置为 0 ,将会无限期等待。
(3) ConnectionString属性 连接数据库的字符串,包含连接到一个数据源的信息,该字符串包含一系列由分号分隔的 argument=value 语句。 ADO 支持其中的 4 个参数,其他参数不经处理直接传给供应器。这 4 个参数为:
Provider= :指定连接所用的供应器名称; File Name= :指定包含预设连接信息的特定供应器的文件名; Remote Provider= :指定打开客户端连接时使用的供应器名称; Remote Server= :指定打开客户端连接时使用的服务器的路径名。
ConnectionString 在连接关闭时是可读写的,在连接打开时是只读的。
![Page 25: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/25.jpg)
25
ADO 连接数据库 通过 ADO 连接数据库有两种方法:1) 通过 DSN 建立连接 在建立好 DSN 之后,通过 Connection 对象建立数据库的连接,一个 DSN 连接需要的参数:DSN 数据源名称、用户名和口令。使用格式如下: ConnectionString=“DSN= 数据源名称 ; UID= 用户名 ; PWD= 口令“
其中各参数的含义如下:○ DSN :指出数据源名称;○ UID :指出登录数据库的用户名,也可以使用 UserID指出用户名;○ PWD :指出登录数据库的口令,也可以使用 Password指出口令。
![Page 26: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/26.jpg)
26
ADO 连接数据库的例子例 15.1假设 DSN 数据源名称为“ SchoolDBS” ,用户名为“ licb” ,口令为“ 640219” ,则建立连接并返回一个记录集的代码如下:
‘声明并初始化一个 ADO 的 Connection 对象Set Conn = New ADODB.Connection
‘设置 Connection 对象的 ConnectionString属性Conn.ConnectionString = “DSN=SchoolDBS;UID=licb;PWD=640219”
‘使用 Connection 对象的 Open 方法连接数据库Conn.Open
‘利用 Connection 对象的 Execute 方法返回数据库的特定数据集Set Rs = Conn.Execute(“select * from student where class=‘95031’”)
![Page 27: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/27.jpg)
27
ADO 连接数据库的例子也可以使用以下等价代码:
‘声明并初始化一个 ADO 的 Connection 对象Set Conn = New ADODB.Connection
‘使用 Connection 对象的 Open 方法连接数据库Conn.Open “DSN=SchoolDBS;UID=licb;PWD=640219”
‘利用 Connection 对象的 Execute 方法返回数据库的特定数据集Set Rs = Conn.Execute(“select * from student where class=‘95031’”)
在 VB 中需要 引用一些 ActiveX 控件才能使用上述代码:VB For Applications
VB runtime objects and procedures
VB objects and procedures
OLE Automation
Microsoft ActiveX Data Object 2.6 Library
![Page 28: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/28.jpg)
28
ADO 连接数据库2) 直接使用数据库文件名或数据源名称建立连接 对于 Access等可以直接使用文件名, SQL Server等可以使用数据源名,其使用格式如下: ConnectionString=“Provider= 提供者名称 ; DSN= 数据源名称 ; DRIVER=驱动程序名称 ; SERVER= 服务器名称 ; DATABASE= 数据库名称 ; UID= 用户名 ; PWD= 口令”
其中各参数的含义如下: Provider :数据提供者,默认为 MSDASQL ,为微软 OLE DB ,通常省略; DSN :要打开的数据库对应的 ODBC 数据源,是可选参数; DRIVER :要打开的数据库所用的驱动程序名称; SERVER :要打开的数据库所在的服务器名,本机可用 local ,可选; DATABASE :要打开的数据库名称,可选; UID :用户名,用来访问数据库,可选; PWD :用户口令或密码,用来访问数据库,可选。
![Page 29: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/29.jpg)
29
ADO 连接数据库的例子例 15.2 要建立到 school 数据库的连接并返回一个记录集,采用 ADO 中不需要 ODBC 设置的连接方式:
‘声明并初始化一个 ADO 的 Connection 对象Set Conn = New ADODB.Connection
‘设置 Connection 对象的 ConnectionString属性Conn.ConnectionString = “Provider=MSDASQL; DRIVER={SQL Server}; SERVER=NO1; UID=licb; PWD=640219; DATABASE=school”
‘使用 Connection 对象的 Open 方法连接数据库Conn.Open
‘利用 Connection 对象的 Execute 方法返回数据库的特定数据集Set Rs = Conn.Execute(“select * from student where class=‘95031’”)
![Page 30: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/30.jpg)
30
ADO 连接数据库的例子也可以使用以下等价代码:
‘声明并初始化一个 ADO 的 Connection 对象Set Conn = New ADODB.Connection
‘使用 Connection 对象的 Open 方法连接数据库Conn.Open “Provider=MSDASQL; DRIVER={SQL Server}; SERVER=NO1; UID=licb; PWD=640219; DATABASE=school”
‘利用 Connection 对象的 Execute 方法返回数据库的特定数据集Set Rs = Conn.Execute(“select * from student where class=‘95031’”)
![Page 31: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/31.jpg)
31
Connection 对象的常用属性(4) ConnectionTimeOut属性 该属性指示在连接成功之前最多可以等待的时间(以秒计),默认值为 15秒。
(5) CursorLocation属性 这个属性是 Connection 对象和 RecordSet 对象都具有的。该属性用来指定游标引擎的位置。该属性对于连接都是可读写的;对于关闭的记录集而言是可读写的;对于打开的记录集是只读的。
adUseNone :没有使用游标服务(只用于向后兼容); adUseClient :使用由本地游标库提供的客户端游标。本地游标服务通常允许使用的许多功能是驱动程序提供的游标无法使用的; adUseServer :默认值。使用数据提供者的或驱动程序提供的游标。这些游标有时非常灵活,对于其他用户对数据源所作的更改具有额外的敏感性。
当CursorLocation 用于客户端RecordSet 或 Connection 对象时,只能将其设置为 adUseClient 。
![Page 32: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/32.jpg)
32
Connection 对象的常用属性(6) DefaultDatabase属性 Connection 对象的默认数据库名称。
(7) Mode属性 这个属性用于指示可以获得的数据修改权限:
adModeUnknown :默认值,权限尚未设置或无法确定; adModeRead :只读; adModeWrite :只写; adModeReadWrite :读 /写; adModeShareDenyRead :防止其他用户读; adModeShareDenyWrite :防止其他用户写; adModeShareExclusive :防止其他用户打开连接; adModeShareDenyNone :防止其他用户以任何权限打开连接。
![Page 33: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/33.jpg)
33
Connection 对象的常用属性(8) State属性 这个属性用于指示 Connection 的当前状态:
adStateClosed :默认值,对象关闭; adStateOpen :对象打开; adStateConnection :对象正在连接; adStateExecuting :对象正在执行一个命令; adStateFetching : RecordSet 对象正在获取所需的行。
![Page 34: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/34.jpg)
34
Connection 对象2. Connection 对象的常用方法(1) BeginTrans 、 CommitTrans 和 RollbackTrans 方法 这 3 个方法用于处理事务。 BeginTrans启动一个新事务;CommitTrans 保存发生的任何变化并结束当前事务,它也可能启动一个新事务; RollbackTrans取消当前事务所做的任何变化并结束该事务,它也可能启动一个新事务。使用格式如下:
connection 对象 .BeginTrans
connection 对象 .CommitTrans
connection 对象 .RollbackTrans
注意:并非所有的提供者都支持事务。对于支持嵌套事务的提供者,在一个打开的事务中调用 BeginTrans 会打开一个新的嵌套事务,返回值能表明嵌套级别。如果是 1 ,表示顶级事务。
![Page 35: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/35.jpg)
35
Connection 对象(2) Cancel 方法 该方法可以终止用 Execute 或 Open 方法启动的异步任务。如果想终止的方法不是异步的, Cancel 方法会返回一个运行时错误。使用方法:
connection 对象 .Cancel
(3) Close 方法 该方法用于关闭与数据库提供者之间的连接。关闭对象并不会把对象从内存中清除,以后还可以再被打开。使用方法:
connection 对象 .Close
![Page 36: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/36.jpg)
36
Connection 对象(4) Execute 方法 该方法用于执行指定的查询、 SQL 语句或者存储过程,返回一个 RecordSet 对象。该方法也是 Command 对象的一个方法。使用方法:
connection 对象 .Execute CommandText, RecordsAffected, Options
其中各参数的含义如下: CommandText :一个命令字符串,其中包含 SQL 语句、存储过程、表名或者其他数据提供者所定义的将要被执行的命令; RecordsAffected :将会随机返回一个带有受该命令影响的记录个数; Options :可选,指示提供者应如何为 CommandText参数赋值。
![Page 37: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/37.jpg)
37
Connection 对象Options参数的取值:
adCmdText : CommandText 是一个 SQL 命令; adCmdTable : CommandText 是一个数据库表名; adCmdTableDirect : CommandText 是一个数据库表名,仅仅在 RecordSet.open 或 requery 时可用。使用 seek 方法必须以此种方式打开; adCmdStoredProc : CommandText 是一个存储过程。
![Page 38: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/38.jpg)
38
Connection 对象(5) Open 方法 该方法用于建立一个与数据源的物理连接。使用方法:connection 对象 .Open ConnectionString, UserID, Password, Options
其中各参数的含义如下: ConnectionString :连接字符串; UserID :用户名;Password :密码; Options :可选:
adAsyncConnect :异步打开连接。当连接可用时, ConnectComplete事件被触发; adConnectUnspecified :同步打开连接(默认)。
这些参数都是可选的。
![Page 39: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/39.jpg)
39
Connection 对象3. Connection 对象的常用事件 当连接事务开始被提交或被回退;或当命令执行时及连接开始或结束时,Connection事件发生。 事件由事件句柄例程处理,这些例程在某个操作开始前或该操作结束后被调用。其中,有一些成对出现的事件,成对的事件中,在操作开始前被调用的事件带有前缀Will- ,而操作结束后的事件带有后缀 -Complete 。(1) BeginTransComplete 、 CommitTransComplete 和RollbackTransComplete事件 这些事件都是在对应方法以异步方式运行完成时被调用。它们被Connection 对象关联的操作执行完成后被调用,内部调用的语法是:
BeginTransComplete TransactionLevel, pError, adStatus, pConnection
CommitTransComplete pError, adStatus, pConnection
RollbackTransComplete pError, adStatus, pConnection
各参数的含义: TransactionLevel :引发该事件的 BeginTrans 的新事务级别 pError :是一个 Error 对象,说明当EventStatusEnum值为adStatusErrorsOccurred 时发生的错误,否则将不对它进行设置
![Page 40: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/40.jpg)
40
Connection 对象 adStatus :表明引发事件的操作的状态,如果操作成功,会将该参数设置为 adStatusOK ,失败是adStatusErrorsOccurred 。如果在该事件返回前设置为adStatusUnwantedEvent ,可以避免该事件通知继续向下传递
pConnection :引发该事件的 Connection 对象
取值 说明adStatusOK 顺利完成该项操作adStatusErrorsOccurred 该项操作失败,错误信息在 pError 中adStatusCantDeny 该操作不能要求取消当前操作adStatusCancel 该操作要求取消当前操作adStatusUnwantedEvent 防止触发后续事件
![Page 41: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/41.jpg)
41
Connection 对象(2) ConnectComplete 和 Disconnect事件 分别在连接开始后、连接结束后被调用,内部调用的语法是:
ConnectComplete pError, adStatus, pConnection
Disconnect adStatus, pConnection
各参数的含义: pError 、 adStatus :与 BeginTransComplete 相同 pConnection :对于 ConnectComplete ,它是与Connect 方法相关联的 Connection 对象的一个引用。对于 Disconnect ,它是与 CommitTrans 方法相关联的 Connection 对象的一个引用
![Page 42: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/42.jpg)
42
Connection 对象(3) ExecuteComplete事件 在 Execute 方法已经以异步方式运行完成时被调用,内部调用的语法是:ExecuteComplete RecordsAffected, pError, adStatus, pCommand, pRecordSet, pConnection
各参数的含义: RecordsAffected :命令所影响的记录数目 pError 、 adStatus 、 pConnection :与BeginTransComplete 相同 pCommand : Command 对象的一个引用 pRecordSet :命令执行结果集的一个引用
![Page 43: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/43.jpg)
43
Connection 对象(4) InfoMessage事件 在当前连接收到警告信息时被调用,内部调用的语法是:
InfoMessage pError, adStatus, pConnection
(5) WillConnect事件 在连接启动之前被调用。当调用该事件时, ConnectionString 、 UserID 、 Password 和Options参数设置为引发该事件的操作所建立的值。当取消该事件时,将调用 ConnectComplete ,并将adStatus 设置为 adStatusErrorsOccurred 。WillConnect ConnectionString, UserID, Password, Options, adStatus, pConnection
![Page 44: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/44.jpg)
44
Connection 对象 各参数的含义: adStatus :如果引发事件的操作无法请求取消,设置为 adStatusCantDeny 。将该参数设置为adStatusCancel 以请求引起取消该通知的连接操作。
(6) WillExecute事件 在对连接执行挂起命令之前调用,并允许用户检查和修改挂起的执行参数。该事件可返回取消挂起命令的请求。WillExecute Source, CursorType, LockType, Options, adStatus, pCommand, pRecordSet, pConnection
![Page 45: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/45.jpg)
45
Connection 对象 各参数的含义: Source : SQL 命令或存储过程名称或执行的命令 CursorType :指出记录集中使用的游标类型,取值参见 RecordSet 对象的对应属性。如果为adOpenUnspecified ,则不可对其进行修改 LockType :指定锁类型,用于将要打开的记录集。如果设置为 adLockUnspecified ,则不可进行修改 adStatus 、 pCommand 、 pRecordSet 、 pConnection :与 WillConnect 相同
![Page 46: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/46.jpg)
46
Command 对象15.2.3 ADO 中的 Command 对象 Command 对象用来执行命令并返回结果集。可使用Command 对象的集合、方法、属性进行下列操作:
使用 CommandText属性定义命令 通过 Parameter 对象和集合定义参数化查询或者存储过程参数 使用 Execute 方法执行命令并返回结果集 执行前应使用 CommandType属性指定命令类型以优化性能 使用 CommandTimeout 设置等待时间 设置 ActiveConnection 关联连接对象 设置 Name 将 Command 标识为与 Connection 对象关联的方法 将 Command 对象传送给 RecordSet 的 Source属性以便获取数据
![Page 47: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/47.jpg)
47
Command 对象1. Command 对象的常用属性(1) ActiveConnection属性 该属性指示指定的 Command 对象当前所属的Connection 对象。
(2) CommandText属性 用于设置命令文本。
(3) CommandTimeout属性 用于设置等待时间。默认 30秒。
![Page 48: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/48.jpg)
48
Command 对象(4) CommandType属性 用于说明执行命令的类型。
取值 说明adCmdUnspecified 自动定义adCmdText SQL 命令adCmdTable 是一个数据表名adCmdStoredProcedure 存储过程adCmdUnknown 默认值,命令类型未知adCmdFile 是一个文件名adExecuteNoRecords 不返回行的命令或存储过程
![Page 49: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/49.jpg)
49
Command 对象(5) Name属性 该属性指出对象的名称。
(6) Parameters属性 包含要传递给存储过程或参数化查询的参数。
(7) Prepared属性 取值为 True 时,表明命令执行前将被优化。
(8) State属性 Command 对象的当前状态。
取值 说明adStateClosed 默认值,表明 Command 对象关闭adStateOpen Command 对象打开adStateConnecting 与数据库是连接的adStateExecuting 正在执行adStateFetching RecordSet 对象的行正在被读取
![Page 50: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/50.jpg)
50
Command 对象2. Command 对象的常用方法(1) Cancel 方法 取消由 Execute 方法引起的异步任务。
(2) CreateParameter 方法 创建新的 Parameter 对象并加入到Parameters 集合中。需要指定参数的名称、类型、说明、大小和值。其语法如下:Command 对象 .CreateParameter(Name, Type, Direction, Size, Value)
![Page 51: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/51.jpg)
51
Command 对象 各参数的含义: Name :参数的名称 Type :参数类型,如表 15.13 所示 Direction :指定该参数是用于传入数据还是传出数据
Size :参数值的最大长度 Value :参数的值
取值 说明adParamUnknown 参数方向未知adParamInput 用于传入数据adParamOutput 用于传出数据adParamInputOutput 既用于传入又用于传出adParamReturnValue 为返回值
![Page 52: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/52.jpg)
52
Command 对象的 Execute 方法(3) Execute 方法 执行对象中定义的 SQL 语句或者存储过程,执行结果返回一个 RecordSet 对象。其语法如下: 对于按行返回的 Command 对象:Set RecordSet = Command 对象 .Execute(RecordAffected, Parameters, Options)
对于按行返回的 Command 对象:Command 对象 .Execute(RecordAffected, Parameters, Options)
各参数的含义: RecordsAffected :受命令影响的记录数 Parameters :命令所需参数
![Page 53: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/53.jpg)
53
Command 对象的 Execute 方法 Options :如何对 CommandText赋值
取值 说明adOptionUnspecified 未定义 Options
adCmdText 命令的文本定义,如 SQL
adCmdTable 表名, ADO生成 SQL查询adCmdTableDirect 从表中返回所有的行adCmdStoredProcedure 存储过程adCmdUnknown 命令类型未知adExecuteAsync 命令异步执行adFetchAsync CacheSize初始数量之后的行异步提取adAsyncFetchNonBlocking 检索行的过程中主线程未阻塞adExecuteNoRecords 表示不返回行或者自动取消所有生成行
的命令,与 adCmdStoredProcedure 或adCmdText 一起使用
adCmdFile 是持续存在的记录集的名称
![Page 54: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/54.jpg)
54
Parameters 集合和 Parameter 对象3. Parameters 集合和 Parameter 对象(1) Parameters 集合 主要属性有: Count属性:集合中 Parameter 成员的个数 Item属性:引用其中的一个对象 Item(Index)
主要方法有: Append :将一个 Parameter 添加到集合中 Delete :删除集合中的一个对象 Refresh :刷新集合
![Page 55: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/55.jpg)
55
Parameters 集合和 Parameter 对象(2) Parameter 对象 主要属性有: Name属性:参数名称 Type属性:参数的数据类型 Direction属性:参数的输入输出方向 Size属性:参数值的最大长度 Value属性:指定对象的值
例 15.3 用 VB 设计一个窗体,调用例 10.4 创建的存储过程 average ,输出给定学号的学生姓名和平均分。
![Page 56: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/56.jpg)
56
RecordSet 对象15.2.4 ADO 中的 RecordSet 对象 用来包含从查询返回的数据行集,可以利用它进行数据库的检索、插入、修改和删除。
1. RecordSet 对象的属性(1) AbslutePage属性:设定当前记录的位置是位于哪一页,或者返回以下取值之一
取值 说明adPosUnknown 对象为空,当前位置未知,或者属性不支持adPosBOF 记录指针位于 BOF ( BOF属性为 TRUE )adPosEOF 记录指针位于 EOF ( EOF属性为 TRUE )
![Page 57: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/57.jpg)
57
RecordSet 对象(2) AbslutePosition属性:设定当前记录的位置是位于整个记录集中的哪一个位置,或者返回以下取值之一
(3) ActiveCommand属性:创建该记录集的 Command 对象的一个引用。可以为 NULL
(4) ActiveConnection属性: Connection 对象的引用
(5)BOF 和 EOF属性: BOF 为真,表示当前指针在第一条记录之前; EOF 为真,表示当前指针在最后一条记录之后(6) CursorLocation属性:游标位置
取值 说明adPosUnknown 对象为空,当前位置未知,或者属性不支持adPosBOF 记录指针位于 BOF ( BOF属性为 TRUE )adPosEOF 记录指针位于 EOF ( EOF属性为 TRUE )
![Page 58: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/58.jpg)
58
RecordSet 对象(7) CursorType属性:指定在记录集中使用的游标类型
(8) DataMember属性:包含 DataSource属性可以检索到的数据项的名称
(9) DataSource属性:指定数据源
取值 说明adOpenUnspecified 未明确说明adOpenForwardOnly 向前游标,默认值。与静态游标相同。adOpenKeyset 键集游标。不能访问其他用户删除的记录,
但是可以看见其他用户更改的记录adOpenDynamic 动态游标。可以看见其他用户的添加、更改
和删除。允许做各种类型的移动。adOpenStatic 静态游标。对其他用户的添加、更改和删除
都不可见。啊
![Page 59: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/59.jpg)
59
RecordSet 对象(10) EditMode属性: RecordSet 的编辑方式
(11) Fields属性:包含与当前记录有关的字段
(12) Filter属性:用于设置过滤器,在记录集中筛选符合条件的记录。包含:类似 where子句的字符串;书签数组;或者:
取值 说明adEditNone 当前没有编辑操作adEditInProgress 当前记录集中的数据已被修改,但未保存adEditAdd 执行了 addNew ,但是插入的记录尚未保存adEditDelete 当前记录已被删除
![Page 60: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/60.jpg)
60
RecordSet 对象
(13) Index属性:包含包含索引的名称,与 Seek 方法相关联(14) LockType属性:检索记录的锁方式
取值 说明adFilterNone 删除当前筛选条件并恢复所有记录adFilterPendingRecords 允许只查看已更改且尚未提交的记录adFilterAffectedRecords 允许查看上一次修改语句所影响的记录adFilterFetchedRecords 允许查看当前缓冲区中的记录adFilterConflictingRecords 允许查看在上一次批更新中失败的记录
取值 说明adLockUnspecified 未说明锁定类型adLockReadOnly 默认值,只读adLockPessimistic 保守式锁定(逐条)adLockOptimistic 开放式锁定(逐条), Update 时才锁定adLockBatchOptimistic 开放式批更新。
![Page 61: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/61.jpg)
61
RecordSet 对象(15) MaxRecords属性:返回的最大行数, 0 表示没有限制
(16) PageCount属性:当前记录集中包含的页数
(17) PageSize属性:单页包含的记录个数
(18) RecordCount属性:记录集中的记录总数,如果提供者不能确定个数或者使用的是仅向前游标,为 -1
(19) Sort属性:指定用于排序的字段。多重字段用逗号分隔,字段后可跟 ASC 或 DESC 。只有使用客户端游标时才有效
![Page 62: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/62.jpg)
62
RecordSet 对象(20) Source属性:记录集的来源(表名 /SQL 语句 / 存储过程)
(21) State属性:批量数据更新中记录集的当前对象状态
(22) Status属性:在批量数据更新中当前记录的状态
取值 说明adStateClosed 默认值,对象是关闭的adStateopen 对象是打开的adStateConnecting RecordSet 对象正在连接adStateExecuting 正在执行命令adStateFetching 正在被读取
![Page 63: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/63.jpg)
63
RecordSet 对象2. RecordSet 对象的方法(1) AddNew :为可更新的 RecordSet 对象添加一个新记录,该方法会把 EditMode改为 adEditAdd 。将新记录进行赋值之后,可以用 Update 方法保存修改。使用方法:
RecordSet 对象 .AddNew FieldList, Values
各参数的含义: FieldList :可选参数,可以是包含单个字段名的字符串,也可以是包含多个字段名的字符串数组Values :可选参数,对应 FieldList 中各个字段的值
(2) Cancel 方法:取消执行挂起的 Execute 或 Open 方法的调用。使用方法:
RecordSet 对象 .Cancel
![Page 64: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/64.jpg)
64
RecordSet 对象(3) CancelBatch :取消挂起的批更新。如果当前的记录还没有保存,本方法将自动调用 CancelUpdate 放弃任何变动。在进行所有的批处理操作时,应该对所有受影响的记录核对 Status属性,以确保它们被完全取消。使用方法:
RecordSet 对象 .CancelBatch AffectRecords
AffectRecords决定方法影响的记录数:
取值 说明adAffectCurrent 仅取消当前记录的挂起更新adAffectGroup 对满足当前 Filter属性设置的记录取消挂起更
新adAffectAll 默认值,取消所有记录的挂起更新adAffectAllChapters 取消记录集所有段的全部记录的挂起更新
![Page 65: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/65.jpg)
65
RecordSet 对象(4) CancelUpdate 方法:取消在调用 Update 方法之前对当前记录或新记录的任何更改。如果当前记录是新加的,该方法会删除之。使用方法:
RecordSet 对象 .CancelUpdate
(5) Close 方法:关闭一个打开的记录集,并且释放所有与之相关的资源。如果同时在记录集中编辑一条记录,将会发生错误,程序将终止 Close 方法,这时首先要调用 Update 或CancelUpdate 方法。如果正以批处理方式工作,将丢失自上一次 UpdateBatch 的所有改变。使用方法:
RecordSet 对象 .Close
![Page 66: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/66.jpg)
66
RecordSet 对象(6) Delete 方法:删除当前的记录或记录组。使用方法:
RecordSet 对象 .Delete AffectRecords
AffectRecords决定了 Delete 删除的范围:
(7) Find 方法:在记录集中搜索满足条件的记录并将指针指向之,如果找不到将指向记录集的末尾。调用 Find 之前必须注意当前的记录是有效的,一般先使用 MoveFirst 方法。使用方法:
RecordSet 对象 .Find(criteria, SkipRows, SearchDirection, start)
各参数含义: criteria :定义一个字段名、比较运算符和一个值。 SkipRows :从当前行开始跳过多少行。默认为 0 。
取值 说明adAffectCurrent 默认值,仅删除当前记录adAffectGroup 删除满足当前 Filter属性设置的记录
![Page 67: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/67.jpg)
67
RecordSet 对象 SearchDirection :向前搜索 adSearchForward ,向后搜索adSearchBackward 。 Start :指定搜索开始的位置。
(8) Move 方法:移动当前记录指针的位置。使用方法:RecordSet 对象 .Move NumRecords, Start
各参数含义: NumRecords :指定移动的记录数。如果为 0 ,位置保持不动并刷新当前的记录;值 >0 表示向尾部移动;值 <0 表示向首部移动。 Start :计算移动记录的基准。 adBookmarkCurrent 表示从当前记录开始(默认值), adBookmarkFirst 表示从第一条记录开始, adBookmarkLast 表示从最后一条记录开始。
![Page 68: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/68.jpg)
68
RecordSet 对象(9) MoveFirst 方法:移动当前记录指针到第一个记录。
(10) MoveLast 方法:移动当前记录指针到最后一个记录。
(11) MoveNext 方法:移动当前记录指针到下一个记录。
(12) MovePrevious 方法:移动当前记录指针到上一个记录。
(13) Open 方法:打开一个新的 RecordSet 对象。使用方法:Open Source, ActiveConnection, CursorType, LockType, Options
各参数含义: Source : Command 的引用、 SQL 语句、表名等
![Page 69: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/69.jpg)
69
RecordSet 对象 ActiveConnection :连接信息。 CursorType :游标类型。 LockType :锁定类型。 Options :指定 Source参数的情况。
(14) Requery 方法:重新执行对象所基于的查询,来更新数据。使用方法:
RecordSet 对象 .Requery Options
(15) Resync 方法:从数据库中刷新当前 RecordSet 中的数据。在使用静态或向前游标时可获得任何已发生的更新数据。 Resync不重复执行查询,看不到任何新加入的行。使用方法:
RecordSet 对象 .Resync AffectRecords, ResyncValues
![Page 70: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/70.jpg)
70
RecordSet 对象 各参数含义: AffectRecords :决定该方法刷新的记录。 ResyncValues :指定是否覆盖当前行。
(16) Save 方法:可以将 RecordSet 保存在文件中,用于保存一个结果集的本地副本。如果对象中存在活动的过滤器,将只会保存过滤后的记录。使用方法:
RecordSet 对象 .Save Destination, PersistFormat Destination :目标文件的完整路径名 PersistFormat :指定保存的格式。默认为 adPersistADTG ,还可以取 adPersistXML 。
取值 说明adResyncAllValues 默认值,覆盖数据,取消挂起的更新adResyncUnderlyingValues 不覆盖数据,不取消挂起的更新
![Page 71: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/71.jpg)
71
RecordSet 对象(17) Seek 方法:将记录指针移动到指定位置,和 Index属性一起用于搜索特殊值。使用方法:
RecordSet 对象 .Seek KeyValues, SeekOption KeyValues :要搜索的特殊值,可能是一个数组(对应 Index的索引键) SeekOption :如何执行搜索
取值 说明adSeekFirstEQ 查找第一个关键值与 KeyValues 相等的行adSeekLastEQ 查找最后一个关键值与 KeyValues 相等的行adSeekAfterEQ 查找第一个关键值大于等于 KeyValues 的行adSeekAfter 查找第一个关键值大于 KeyValues 的行adSeekBeforeEQ 查找第一个关键值小于等于 KeyValues 的行adSeekBefore 查找第一个关键值小于 KeyValues 的行
![Page 72: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/72.jpg)
72
RecordSet 对象(18) Update 方法:保存对当前记录的所有修改。也可以通过Fields 和 Values参数来定义字段的值。如果在记录集中移动到另外一行, ADO 会自动调用 Update 来保存修改。使用方法:
RecordSet 对象 .Update Fields, Values
Fields 用来指定为哪些字段赋值, Values 用来指定 Fields中各个字段的值。
(19) UpdateBatch 方法:将所有挂起的批更新写入磁盘。使用方法:
RecordSet 对象 .UpdateBatch AffectRecords
AffectRecords 用来指定本方法会影响到的记录。
![Page 73: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/73.jpg)
73
RecordSet 对象3. RecordSet 对象的事件 当在记录集中移动或者记录集发生变化时, RecordSet事件会发生。(1) EndOfRecordSet事件:当前记录已经是最后一个记录,如果还企图把记录指针向后移动时会发生该事件。可以使用这个事件来从数据库导入更多行。使用方法:
EndOfRecordSet fMoreData, adStatus, pRecordSet
各参数的含义: fMoreData :在事件的执行过程中如果有新记录被加入到记录集,则本参数被置为 TRUE adStatus :表示事件执行的状态 pRecordSet :触发该事件 RecordSet 对象的引用
![Page 74: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/74.jpg)
74
RecordSet 对象(2) FetchComplete事件:在异步操作期间会被定期触发报告检索的进度。使用方法:
FetchComplete pError, adStatus, pRecordSet
各参数的含义: pError :当 adStatus指示发生错误时用于存储 Error 对象
(3) FetchProgress事件:当异步操作期间已经检索了所有的行之后触发。使用方法:
FetchProgress Progress, MaxProgress, pRecordSet
各参数的含义: Progress :表示当前已经检索的记录数 MaxProgress :表示预计要检索的记录数
![Page 75: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/75.jpg)
75
RecordSet 对象(4) FieldChangeComplete事件和 WillChangeField事件 在改变一个或者多个 Field 对象值的操作前后分别触发。在Complete事件中可以通过设置 adStatus 为 adStatusCancel 来取消操作。使用方法:
WillChangeField cFields, Fields, adStatus, pRecordSet
FieldChangeComplete cFields, Fields, pError, adStatus, pRecordSet
各参数的含义: cFields :被修改的 Field 对象个数 Fields :被修改的 Field 对象数组
![Page 76: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/76.jpg)
76
RecordSet 对象(5) MoveComplete事件和 WillMove事件 当记录指针发生移动前后会分别触发。使用方法:
WillMove adReason, adStatus, pRecordSet
MoveComplete adReason, pError, adStatus, pRecordSet
各参数的含义: adReason :触发事件的原因
取值adRsnAddNew adRsnDelete adRsnUpdate
adRsnUndoAddNew adRsnUndoDelete adRsnUndoUpdate
adRsnRequery adRsnResync adRsnClose
adRsnMove adRsnMoveFirst adRsnMoveLast
adRsnMoveNext adRsnMovePrevious adRsnFirstChange
![Page 77: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/77.jpg)
77
RecordSet 对象(6) RecordChangeComplete事件和 WillChangeRecord事件 在改变一个或者多个记录行的操作前后分别触发。使用方法:
WillChangeRecord adReason, cRecords, adStatus, pRecordSet
RecordChangeComplete adReason, cRecords, pError, adStatus, pRecordSet
各参数的含义: cRecords :被修改的记录个数 Fields :被修改的 Field 对象数组
![Page 78: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/78.jpg)
78
RecordSet 对象(7) RecordSetChangeComplete事件和 WillChangeRecordSet事件 在改变一个或者多个记录行的操作前后分别触发。使用方法:
WillChangeRecordSet adReason, adStatus, pRecordSet
RecordSetChangeComplete adReason, pError, adStatus, pRecordSet
例 15.4 在 VB 中设计一个窗体,查询指定范围内的学生记录。
例 15.5 在 VB 中设计一个窗体,输入一个学生的记录,并提示用户是否真的输入,根据用户选择提交或者回滚操作。
例 15.6 在 VB 中设计一个窗体,输入一个学号,显示该学生的其他信息。
![Page 79: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/79.jpg)
79
Field 对象15.2.5 ADO 中的 Field 对象 RecordSet 对象中含有由 Field 对象组成的 Fields 集合。其中每一个 Field 对象对应记录中的一个字段。访问 Field 对象的方法有:
rs.Fields(0)
rs.Fields(0).Value
rs(“字段名” )
rs(“字段名” ).Value
rs![字段名 ]
对于 Field 对象的访问就是一种集合的访问方式,其中Field 对象的 Value属性可以被忽略掉。
![Page 80: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/80.jpg)
80
Field 对象1. Field 对象的属性(1) ActualSize属性:字段的实际长度
(2) Attributes属性:指示对象的一项或多项特性
取值 说明adFldUnspecified 提供者不支持字段的属性adFldMayDefer 延迟该字段,只在访问该字段时检索数据adFldUpdatable 该字段可以写入adFldUnknownUpdatable 提供者无法确定字段是否可以写入adFldFixed 该字段包含定长数据adFldIsNullable 该字段可以接受 Null值adFldMayBeNull 可以从该字段读取 Null值adFldLong 该字段为长二进制字段
![Page 81: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/81.jpg)
81
Field 对象
(3) DataFormat属性:规定数据格式
(4) DefinedSize属性: Field 对象所定义的大小
取值 说明adFldRowID 该字段含有无法写入的持久行标识符adFldRowVersion 该字段含有包含更新标志的某种时间或者日期标志adFldCacheDeferred 提供者缓存了字段值,并已完成随后对缓存的读取adFldChapter 字段包含一个章值,指定与父字段相关的特殊子记录集adFldNegativeScale 字段包含支持负比例值的数据列adFldKeycolumn 字段是主键adFldRowURL 字段包含 URL ,指示记录所在的数据源存储位置adFldDefaultStream 字段包含记录所在的数据源的默认流adFldCollection 字段包含另外一个数据源的集合(如一个文件夹)
![Page 82: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/82.jpg)
82
Field 对象(5) Name属性:表示字段名
(6) NumericScale属性:确定数据类型在小数点右边的位数
(7) OriginalValue属性:在发生改变之前记录中原来存在的 Field值
(8) Precision属性:返回数据型字段的位数
(9) Properties属性:包含一个字段的提供者的特定信息
(10) Type属性:表明字段的数据类型
(11) UnderlyingValue属性:用来指出数据库中一个 Field 对象的当前值,该值是一个事务可见的值,并且可能已经被另一个事务更新
(12) Value属性:当前的字段值
![Page 83: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/83.jpg)
83
Field 对象2. Field 对象的方法(1) AppendChunk 方法:将数据附加到一个大型文本或二进制数据字段上。 Field 对象上第一次调用该方法就把数据写入字段,覆盖现有的数据。以后再调用的时候就把数据附加到现有数据上。使用方法:
Field 对象 .AppendChunk Data
(2) GetChunk 方法:用于检索大型文本或二进制数据 Field 对象的全部或部分内容。 Field 对象上第一次调用时将从数据的开始处读取。返回值是特定的字节的数量。以后每次都从上次结束的地方开始。使用方法:
Field 对象 .GetChunk(size)
![Page 84: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/84.jpg)
84
Field 对象3. Fields 集合属性如下:(1) Count属性:表示集合中 Field 对象的个数
(2) Item(index)属性: Field 对象的引用
方法如下:(1) Append 方法:创建一个新的 Field 对象并加入到集合中
(2) Delete 方法:从集合中删除一个 Field 对象
(3) Refresh 方法:更新集合中的对象以便反映来自特定提供者的对象
(4) Update 方法:保存对 Fields 集合的任何修改
![Page 85: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/85.jpg)
85
15.3 常用的数据访问控件15.3.1 ADO Data 控件 ADO Data 控件是 VB 6.0 中文版提供的一个 ActiveX 控件。通过 ADO Data 控件可以利用 ADO 来快速建立数据绑定的控件和数据提供者之间的连接。 ADO Data 控件可以实现以下功能: 连接一个本地数据库或远程数据库 打开一个指定的数据库表,或定义一个基于 SQL 的查询、存储过程或该数据库中的表的视图的记录集合 将数据字段的数值传递给数据绑定的控件,可以在这些控件中显示或更改这些数值 添加新的记录,或者根据更改显示在绑定的控件中的数据来更新一个数据库
![Page 86: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/86.jpg)
86
ADO Data 控件在 VB 中使用 ADO Data 控件
![Page 87: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/87.jpg)
87
ADO Data 控件1. ADO Data 控件的属性(1) Align属性:将控件摆放在窗体的对齐方式,有 5 种选择: vbAlignNone :随意摆放 vbAlignTop :放在窗体顶端 vbAlignBottom :放在窗体底部 vbAlignLeft :放在窗体最左边 vbAlignRight :放在窗体最右边
(2) BOFAction 和 EOFAction属性:如果记录指针移动到 BOF 或者 EOF 位置后,再向前或向后移动会发生错误。这两个属性分别说明出现这些错误后分别用什么操作来进行处理。 BOFAction 有两个可选常量: adDoMoveFirst 移动到第一个记录, adStayBOF 移动到记录集的开始 EOFAction 有 3 个可选常量: adDoMoveLast 移动到最后一个记录, adStayEOF 移动到记录集的结尾, adDoAddNew增加一个记录
![Page 88: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/88.jpg)
88
ADO Data 控件(3) ConnectionString属性:用来建立到数据源的连接信息,可以用字符串设置或者用对话框来设置。在该控件上单击右键选择“属性”。
![Page 89: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/89.jpg)
89
ADO Data 控件(4) RecordSource属性:设置要连接的表或者 SQL查询语句
(5) CommandType属性:指定 RecordSource属性的取值类型: adCmdUnknown :默认值,命令类型未知 adCmdTable :是一个表,将其所有的列生成一个 SQL adCmdText :是一个命令 adCmdStoreProc :是一个存储过程
(6) UserName属性:指定用户的名称。 ConnectionString 中的用户名将覆盖 UserName 的设置
(7) Password属性:指定密码。也会被 ConnectionString 中的设置覆盖
(8) ConnectionTimeout属性:连接超时设置,以秒为单位
![Page 90: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/90.jpg)
90
ADO Data 控件2. ADO Data 控件的方法(1) UpdateControls 方法:用于更新绑定控件的内容。绑定控件是通过设置控件的 DataSource属性和 DataField属性,从而将该控件与 ADO Data 控件的某个字段绑定在一起。使用绑定控件,可以让该控件的内容自动更新,取回记录集当前记录的内容或者将更新的内容保存到记录集中
(2) AddNew 方法:在记录集中添加一条新记录
(3) Delete 方法:在记录集中删除当前记录
(4) MoveFirst 、 MoveLast 、 MoveNext 和 MovePrevious 方法
![Page 91: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/91.jpg)
91
ADO Data 控件(5) CancelUpdate 方法:取消记录集中的添加或编辑操作,恢复修改前的状态
(6) UpdateBatch 方法:用于保存记录集中的添加或编辑操作
![Page 92: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/92.jpg)
92
ADO Data 控件3. ADO Data 控件的事件(1) WillMove 和 MoveComplete事件
(2) WillChangeField 和 ChangeFieldComplete事件
(3) WillChangeRecord 和 ChangeRecordComplete事件
![Page 93: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/93.jpg)
93
DataGrid 控件15.3.2 DataGrid 控件 DataGrid 控件是一种类似于电子数据表格的绑定控件,用来显示一系列行和列来表示记录集对象的记录和字段。可以使用 DataGrid 来创建一个允许最终用户阅读和写入到绝大多数数据库的应用程序。当在设计时设置了 DataGrid 控件的DataSource属性后,就会用数据源的记录集来自动填充该控件,并自动设置了该控件的列标头。然后用户可以编辑该网格的列,删除、重新安排、添加列标头或者调整任意一列的宽度。
![Page 94: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/94.jpg)
94
DataGrid 控件1. DataGrid 控件的属性(1) DataSource属性:用于设置 DataGrid 控件的数据源。如果DataGrid 控件使用一个 ADO Data 控件作为其 DataSource ,则重写 RecordSource 、刷新该 ADO Data 控件,都将改变所显示的数据。
(2) Columns 数组属性:存放 DataGrid 控件中的当前行的数据,Columns(0) 存放第 1 个字段值,以此类推。
(3) AllowUpdate 、 AllowAddNew 和 AllowDelete属性:分别指定控件是否能够更新、增加和删除数据。
(4) ScrollBars属性:用于指定控件的滚动条类型。
![Page 95: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/95.jpg)
95
DataGrid 控件2. DataGrid 控件的方法(1) ClearFields 方法:清除控件中的所有字段
(2) Refresh 方法:刷新控件中的数据。每次刷新后当前记录设置在第一个记录。
3. DataGrid 控件的事件(1) Click事件
(2) DblClick事件
![Page 96: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/96.jpg)
96
DataCombo 控件15.3.3 DataCombo 控件 DataCombo 控件是以一个下拉列表的形式提供给用户的。它可以和一个具体数据库中的表、表中的某些项、一段 SQL 语句相联系,从而在下拉列表中显示出具体的数据。
![Page 97: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/97.jpg)
97
DataCombo 控件1. DataCombo 控件的属性(1) DataSource属性
(2) DataField属性:设置程序可以从 DataCombo 中读取数据的字段。
(3) RowSource属性:设置一个 ADO 控件,下拉列表中的项由 ADO 控件中的数据填充。
(4) ListField属性:设置用于填充下拉列表选项的字段名称。
![Page 98: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/98.jpg)
98
DataCombo 控件2. DataCombo 控件的方法Refresh 方法
3. DataCombo 控件的事件(1) LostFocus事件
(2) Click事件
![Page 99: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/99.jpg)
99
TreeView 控件15.3.4 TreeView 控件 TreeView 控件用来显示信息的分级视图,如同 Windows中显示的文件和目录。 TreeView 控件中的各项信息都有一个与之关联的 Node 对象。 TreeView显示 Node 对象的分层目录结构,每个 Node 对象均由一个 Label 对象和其相关的位图组成。在建立 TreeView 控件后,用户可以展开和折叠、显示或隐藏其中的节点。 TreeView 控件一般用来显示文件和目录结构、文档中的类层次、索引中的层次和其他具有分层目录结构的信息。
![Page 100: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/100.jpg)
100
TreeView 控件1. TreeView 控件的属性(1) LineStyle属性:设置控件中 Node 对象之间显示的线条类型,可以有两种取值: 0-TvwTreeLines :默认值,用三线显示兄弟节点和父子节点之间的连线 1-TvwRootLines :除了三线之外,还显示根目录之间的连线
(2) Style属性:设置控件中 Node 对象的文本类型和图形类型。取值: 0-tvwTextOnly :只显示文本 1-tvwPictureText :显示文本和图像 2-tvwPlusMinusText :显示 +/- 和文本 3-tvwPlusPictureText :显示 +/- 、图像和文本
![Page 101: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/101.jpg)
101
TreeView 控件 4-tvwTreelinesText :显示连线和文本 5-tvwTreelinesPictureText :显示连线、图像和文本 6-tvwTreelinesPlusMinusText :显示连线、 +/- 和文本 7-tvwTreelinesPlusMinusPictureText :默认方式,全部显示
(3) Indentation属性:设置每一层 Node 对象的缩进量,默认值为 38.00
(4) Nodes属性和 Index属性:前者为控件中 Node 对象的集合,后者用来指定集合中的一个 Node 对象。
TreeView 对象 .Nodes(index)
![Page 102: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/102.jpg)
102
TreeView 控件2. Nodes 集合的属性和方法Nodes 的常用属性:(1) Count属性
(2) Text属性:集合中某个 Node 对象的文字信息TreeView 对象 .Nodes(Index).Text
(3) Key属性:指定某个 Node 对象的关键字TreeView 对象 .Nodes(Index).Key
(4) Root 、 FirstSibling 和 Next属性:分别指定某个 Node 对象的根节点、第一个兄弟节点和下一个兄弟节点
![Page 103: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/103.jpg)
103
TreeView 控件Nodes 的常用方法:(1) Clear 方法:清除 Nodes 中所有的节点
(2) Add 方法:向集合中加入一个新节点。使用方法TreeView 对象 .Nodes.Add ( Relative, Relationship, Key, Text, Image, Selectedimage)
其中: Relative 表示相关联的亲属,一般用关键字表示;Relationship 表示新节点与亲属间的关系, 1-tvwNext 表明亲属间是平等关系, 4-tvwChild 表明亲属间是父子关系。 Key 表示新节点的关键字, Text 是显示的文本, Selectedimage 表示显示的图形。
![Page 104: 第 15 章 用 ADO 操作 SQL Server 数据库](https://reader033.vdocuments.net/reader033/viewer/2022061418/56812a47550346895d8d8500/html5/thumbnails/104.jpg)
104
TreeView 控件3. TreeView 控件的事件(1) NodeClick事件:单击节点的文本时激活。处理该事件的函数可以获得被点击的节点的 Node 对象。
(2) Expand事件:展开一个“ +”节点时激活。处理该事件的函数可以获得被点击的节点的 Node 对象
(3) Collapse事件:折叠一个“ -”节点时激活。处理该事件的函数可以获得被点击的节点的 Node 对象
例 15.8 设计一个窗体,用 TreeView显示所有班号,当用户单击某个班号时,在右边的列表框中显示该班的全部学生的记录。