Upload
brynn-miller
View
136
Download
11
Embed Size (px)
DESCRIPTION
VB 中的 ADO 对象编程. 补充内容. ADO(ActiveX Data Objects) ActiveX 数据对象. 是微软最新的数据访问技术,与 OLE DB 一起工作。 OLE DB 是一个低层的基于 COM 的数据访问接口,它向应用程序提供了一个统一的数据访问方法,用它可以访问各种数据源,包括关系型数据库、电子邮件系统、自定义的商业对象。 其模型如下:. VB 应用程序. ADO. OLE DB. RDBMS. 目录管理. Email. 先在 VB 工程中把 ADO 对象库加载上. - PowerPoint PPT Presentation
Citation preview
VB 中的 ADO 对象编程
补充内容
ADO(ActiveX Data Objects) ActiveX 数据对象 是微软最新的数据访问技术,与 OLE D
B 一起工作。 OLE DB 是一个低层的基于 COM 的数据访问接口,它向应用程序提供了一个统一的数据访问方法,用它可以访问各种数据源,包括关系型数据库、电子邮件系统、自定义的商业对象。
其模型如下:
VB 应用程序
ADO
OLE DB
RDBMS Email 目录管理
先在 VB 工程中把 ADO 对象库加载上
工程 引用 选中 microsoft activex data object 2.7 library
一、通过 DSN 建立连接 DSN: 应用程序用以请求一个连到 ODB
C(open database connectivity, 开放数据库互连 ) 数据源的连接的名字。
也就是说他代表 ODBC 连接的名字,隐藏了诸如数据库名字、所在目录、数据库驱动程序、用户 ID 、密码等,使具体的数据库对应用程序变得透明。
1 、 DSN 分类: 系统 DSN :可以被登陆到系统中的所有
用户使用。 用户 DSN :为特定用户建立的,只能被
建立他的用户使用。 文件 DSN :用于文档的 DSN 。
2 、如何建立 Access 的系统 DSN : (Winxp)
(1) 开始 控制面板 性能维护 管理工具 数据源 ODBC;
(2) 单击系统 DSN 选项卡 添加创建新数据源
3 、建立 SQL Server 系统 DSN
Dim cna as new adodb.connection Dim cnb as new adodb.connection Private sub command1_click() Dim cnastring as string Cnastring=“dsn=sqlpubs;uid=sa;pwd=1234” ‘SQL
DSN 数据源的连接字符串 With cna .connectionstring=cnastring .connectiontimeout=10 .open End with 或: cna.open “dsn=sqlpubs;uid=sa;pwd=1234” 或: can.open Cnastring
Cna.close ‘ 关闭连接End sub
Private sub command2_click()Dim cnbstring as stringCnbstring=“dsn=aa;uid=;pwd=” ‘Access DSN 数据源的连接字符串With cnb .connectionstring=cnastring .connectiontimeout=10 .openEnd with或: cnb.open“dsn=aa;uid=;pwd=”
Cnb.close ‘ 关闭连接End sub
二、直接使用数据库文件名 1 、 SQL Server 的连接字符串 “driver={SQL Server};server=bjz;database=pubs;
uid=sa;pwd=1234” 2 、 Access 的连接字符串 (1)“driver=Microsoft access driver(*.mdb);DBQ=
“ & app.path & “\student.mdb” (2) 使用 OLE DB 提供者建立连接 "provider=Microsoft.Jet.OLEDB.4.0;Data Sour
ce=“ & App.Path & ”\student.mdb" & “user id=;password=”
ADO 中比较重要的是 :Command,Connection,Recordset 对象
(1) Connection 对象 Connection 对象用于建立与数据库的连接,通过连接可从应用程序访问数据源 . 它保存诸如指针类型 , 连接字符串 , 查询超时 , 连接超时和缺省数据库这样的连接信息。
2) Command 对象 在建立 Connection 后 , 可以发出命令操作数据源。一般情况下 ,Command对象可以在数据库中添加 , 删除或更新数据 , 或者在表中进行数据查询。 Command 对象在定义查询参数或执行一个有输出参数的存储过程时非常有用。
(3) Recordset 对象 Recordset 对象只代表一个记录集 , 这个记录集是一个连接的数据库中的表 , 或者是 Command 对象的执行结果返回的记录集 . 在 ADO 对象模型中 , 是在行中检查和修改数据的最主要的方法 , 所有对数据的操作几乎都是在Recordset 对象中完成的。 Record 对象用于指定行 , 移动行 , 添加 , 更改 , 删除记录 .
在实际编程过程中使用 ADO 的一个典型的存取数据的步骤为: 1 、 连接数据源 2 、 打开记录集对象 3 、 使用记录集 4 、 断开连接
1 、 如何连接数据源 利用 Connection 对象可以创建一个数据源的连接 .应用的方法是 Connection 对象的 Open 方法 . 语法 : Connection 对象 .Open ConnectionString, UserID, PassWord, OpenOptions 其中: Connection 对象为你定义的 Connection 对象的实例 ; ConnectionString 为可选项 , 包含了连接的数据库的信息 ; UserID 可选项 , 包含建立连接的用户名 ; PassWord 为可选项 , 包含建立连接的用户密码 ; OpenOptions 为可选项 , 假如设置为 dConnectAsync, 则连接将异步打开 .
例: cn.open Cnstring
2. 打开记录集对象 实际上记录集返回的是一个从数据库取回的查询结果集 . 因此有三种打开方法 :
一种使用记录集的 Open 方法。 另一种是用 Connection 对象的 Execute
方法 . 一种是用 Command 对象的 Execute 方
法 .
(a) 记录集的 Open 方法 语法 : Recordset.Open Source, ActiveConnection, CursorType, LockType, Options 其中: Recordset 为所定义的记录集对象的实例 . Source 可选项 , 指明了所打开的记录源信息 . 可以是合法的命令 , 对象变量名 ,SQL 语句 , 表名 , 存储过程调用 , 或保存记录集的文件名 . ActiveConnection 可选项 , 合法的已打开的 Connection 对象的变量名 , 或者是包含 ConnectionString 参数的字符串 . CursorType 可选项 , 确定打开记录集对象使用的指针类型 . LockType 可选项 确定打开记录集对象使用的锁定类型 .
(b)Connection 对象的 Execute 方法 语法 : Set recordset=Connection.Execute(CommandText,RecordsAffected,Options) 参数说明 : CommandText 一个字符串 , 返回要执行的SQL 命令 , 表名 , 存储过程或指定文本 . RecordsAffected 可选项 ,Long 类型的值 , 返回操作影响的记录数 . Options 可选项 ,Long 类型值 , 指明如何处理 CommandText 参数 .
(c) Command 对象的 Execute 方法使用 Command 对象的 Execute 方法执行 Comma
ndText 属性中设置的 SQL 命令 , 返回查询记录集 . 语法如下 : Command.Execute RecordsAffected, Parameters, Options ' 不返回记录集或者 Set Recordset=
command.Execute(RecordsAffected,Parameters,Options) ‘ 返回记录集
CommandText 的语法为 : Command.CommandText=stringvariable 其中 : stringvariable 为字符串变量 , 包含 SQL 语句 , 表名或存储过程 .
3. 使用记录集 (a) 添加新的记录 : 在 ADO 中添加新的记录用的方法为 :AddNew 它的语法为 : Recordset.AddNew FieldList, Values Recordset 为记录集对象实例 FieldList 为一个字段名 , 或者是一个字段数组 . Values 为给要加信息的字段赋的值 , 如果 FiledList 为一个字段名 , 那么 Values 应为一个单个的数值 , 假如 FiledList 为一个字段数组 , 那么 Values 必须也为一个个数 , 类型与 FieldList相同的数组 . 当用 AddNew 方法为记录集添加新的记录后 , 应使用 UpDate 将所添加的的数据存储在数据库中 .
(记录的修改)
(b) 删除记录 在 ADO 中删除记录集中的数据的方法为 :Delete 方法 , 这与 DAO 对象的方法相同 ,但是在 ADO 中它的能力增强了 , 可以删掉一组记录了 . 它的语法如下 : Recordset.Delete AffectRecords 其中的 ,AffectRecords 参数是确定 Delete 方法作用的方式的 , 它的取值如下 : adAffectCurrent 只删除当前的记录 adAffectGroup 删除符合 Filter 属性设置的那些记录 . 为了一次能删除一组数据 ,应设置 Filter 属性 .
(c) 查询记录 在 ADO 中查询的方法很灵活 , 有几种查询的方法 . 使用连接对象的 Execute 方法执行 SQL命令 , 返回查询记录集 . 使用 Command 对象的 Execute 方法执行 CommandText 属性中设置的 SQL 命令 , 返回查询记录集 .
使用记录集的 Open 方法,返回查询记录集。
4. 断开连接 在应用程序结束之前 , 应该释放分配给 ADO 对象的资源 , 操作系统回收这些资源并可以再分配给其他应用程序 . 使用的方法为 :Close 方法 . 语法如下 : Object.Close ‘ Object 为 ADO 对象如果不做的话,通常 VisualBasic会自动释放和回收资源。rs.CloseSet rs=NothingSet cmd=Nothingcn.CloseSet cn=Nothing
二、 数据库访问对象( ADO) ADO(ActiveX Data Objects)ActiveX 数据对象是微软最新的数据访问技术,与 OLE DB 一起工作。
在 Visual Basic 中使用 ADO– 在一个打开的 Visual Basic 6.0 的工程中,选择菜单〔工程〕 / 〔引用〕命令,出现“引用”对话框。在“可用的引用”列表框中选择Microsoft ActiveX Data Objects 2.8 选项,单击〔确定〕按钮,就可以在程序中加入对 ADO 的引用了。
使用 ADO 可以实现以下目的:a)连接一个本地数据库或远程数据库b)打开一个指定的数据库表,或定义一个基于
结构化查询语言( SQL)的查询或存储过程或该数据库中的表的视图的记录集合
c)将数据字段的值传递给数据绑定的控件,可以在这些控件中显示或更改这些数值
d)添加新的记录,或根据对绑定的控件中的数据的更改来更新一个数据库
– ADO 的内置对象1 、连接对象( Connection )
用来与数据库建立连接。在建立连接前,最主要的是需要设置连接字符串,用来指定连接数据库所用的驱动程序、数据源名称、用户名和密码等。
常用的属性与方法:– ConnectionString 属性:连接字符串,在打开连接前需要设置– ConnectionTimeout 和 Mode 属性:超时时间和连接模式,
一般在打开连接前也需要设置– CursorLocation 属性:设置或者返回游标位置– DefaultDatabase 属性:为连接指定一个默认的据库– Provider 属性:为连接指定一个驱动程序,可以包括在 Conn
ectionString 中– Open,Close 方法:建立或中断一个连接– Execute 方法:在连接上执行命令,比如执行一个 SQL 语句– Errors 对象:数据源返回的错误信息 ( eg)
“连接”是交换数据所必需的环境,通过“连接”可使应用程序访问数据源。 Connection 对象用于指定专门的提供者和任意参数。下表 列出 Connection 对象的常用属性和方法。
ConnectionString属性 指定到数据源的连接字符串
Open方法 打开到数据源的连接
Execute方法 对连接执行各种操作
Cancel方法 取消 Open 或 Execute方法的调用
Close方法 关闭打开的 Connection对象
如何连接 利用 Connection 对象可以创建一个数据源的连接 . 应用
的方法是 Connection 对象的 Open 方法 . 语法 :Connection 对象 .Open ConnectionString, UserID, PassWord, OpenOptions 其中: Connection 对象为你定义的 Connection 对象的实例 ; ConnectionString 为可选项 , 包含了连接的数据库的信息 ; UserID 可选项 , 包含建立连接的用户名 ; PassWord 为可选项 , 包含建立连接的用户密码 ; OpenOptions 为可选项 , 假如设置为 adConnectAsync, 则连接将异步打开 .
直接使用数据库文件名建立连接1 、 SQL Server 的连接字符串“driver={SQL Server};server=127.0.0.1;database=stu
dent;uid=sa;pwd=xxxx”2 、 Access 的连接字符串(1)“driver=Microsoft access driver(*.mdb);DBQ=“ & a
pp.path & “\student.mdb”(2) 使用 OLE DB 提供者建立连接"provider=Microsoft.Jet.OLEDB.4.0;Data Source=
“ & App.Path & ”\student.mdb" & “user id=;password=”
2 、命令对象( Command) 定义了数据库的一系列操作。使用命令对象来查询数据
库,查询结果以数据集对象( Recordset)形式返回。命令对象在操纵数据库前需要与一个已经打开的连接对象( Connection)建立关联。
常用的属性与方法: ActiveConnection 属性:将一个命令行对象与一个打开的
连接关联 CommandText 属性:定义命令行的内容,比如 SQL 语句
等 CommandType 属性:指定命令的类型 CommandTimeout 属性:指定服务器等待一条命令执行的
时间 Execute 方法:执行命令并返回一个数据集对象( Record
set)
ActiveConnection属性 设置到数据源的连接信息
CommandText属性 定义命令(例如, SQL语句)的可执行文本
CommandType属性 指定命令类型以优化性能
Execute方法 执行 CommandText属性指定的操作
Cancel方法 取消 Execute方法的调用
3 、数据集对象( Recordset) 定义了从数据库返回的一系列记录的集合。通过数
据集可以对记录及组成记录的列进行各种操作。常用的属性与方法: RecordCount 属性:返回记录集中记录的条数 BOF,EOF 属性:返回记录集中游标的当前位置是否是
记录集的头或尾 MoveNext,MovePre: 将记录集中的游标向后、前移动
一个位置 MoveFirst,MoveLast: 将记录集中的游标移动到最前或
最后
ActiveConnection属性 返回 Recordset对象所属的 Connection对象。
BOF和 EOF属性 指示当前记录指针是否位于首记录前、末记录后。
Bookmark属性 返回并设置当前记录的书签
CursorType属性 指定打开 Recordset对象时应该使用的游标类型
Filter属性 设置 Recordset对象中的筛选条件
RecordCount属性 返回 Recordset对象中记录的数目
Sort属性 设置排序字段
Source属性 指定 Recordset对象的数据源: Command对象变量、 SQL语句、存储过程
AddNew方法 可创建和初始化新记录
CancelUpdate方法 可取消对当前记录所作的任何更改或放弃新添加的记录
Delete方法 删除当前记录或记录组
Move方法 移动 Recordset对象中当前记录的位置
MoveFirst、MoveLast、MoveNext和MovePrevious方法
移动到指定 Recordset对象中的第一个、最后一个、下一个或上一个记录并使该记录成为当前记录
Requery方法 重新执行对象所基于的查询,来更新 Recordset对象中的数据
Update方法 保存对 Recordset对象的当前记录所做的所有更改
打开记录集对象 实际上记录集返回的是一个从数据库取回的查询结果集 .因此他有三种打开方法 :
•一种使用记录集的 Open 方法 ,•另一种是用 Connection 对象的 Execute 方法 .•第三种是使用 Command 对象的 Execute 方法执行CommandText 属性中设置的 SQL 命令 ,返回查询记录集 .
1. 记录集的 Open 方法 语法 :Recordset.Open Source, ActiveConnection, CursorType, LockType, Options 其中: Recordset 为所定义的记录集对象的实例 . Source 可选项 ,指明了所打开的记录源信息 .可以是合法的命令 ,对象变量名 ,SQL 语句 ,表名 ,存储过程调用 ,或保存记录集的文件名 . ActiveConnection 可选项 ,合法的已打开的 Connection 对象的变量名 ,或者是包含 ConnectionString 参数的字符串 . CursorType 可选项 ,确定打开记录集对象使用的指针类型 . LockType 可选项 确定打开记录集对象使用的锁定类型 .
使用 recordset 的 open 方法返回记录集:dim cn as new adodb.connection
dim rs as new adodb.recordset
Dim cnstring$,strsql$
Cnstring=“driver={SQL Server};server=127.0.0.1;database=student;uid=sa;pwd=”
Strsql =“select * from 基本情况 where 班级 =”05 网一“ or 班级 =”05 网二“”
Cn.open cnstring
Rs.open strsql,cn,1,1
记录集类型,1 是键集游标
记录集锁类型1 :只读
3 :开放式可以 update
CursorType(游标类型)有四种:程序中常用第二种 AdOpenKeyset,
AdOpenForwardOnly = 0 ''只能用 MoveNext读取 ,并且打开的同时建立的数据库的备份,不能即时体现数据库记录状态,比如记录的编辑和增删.
AdOpenKeyset = 1 ''可上下滚动的游标,给打开的记录创建了一个关键字列表,类似记录集的描述,访问的时候才去取得数据值,就是说可以即时看到修改信息,但是不能即时得到数据是否删除的信息,因为这个关键字列表是事先初始化好的.AdOpenDynamic = 2 ''完全可滚动,可得到数据的最新状态,执行效率也会有所降低.
AdOpenStatic = 3 '' 完全可滚动,但是和adOpenKeyset类似 ,它先将数据库备份文件之后进行操作.可以断开数据库连接后继续使用.
ADO 锁的类型有四种 : AdLockReadOnly = 1'' 只读锁 , 不能操作记录
AdLockPessimistic= 2''悲观锁 , 操作者打开之后立即上锁 ,直到修改完成或者放弃修改为止 , 此时其他人无法编辑 .
AdLockOptimistic= 3''乐观锁 ,当记录将要被更新的时候才开始上锁 ,但是不能保证在提交修改之前是否有人改动过 .
AdLockBatchOptimistic= 4''批量乐观锁 ,SQL server中要使用它 , 必须打开一个可上下滚动的游标 , 如 adOpenKeyset,adOpenStatic.
2.Connection 对象的 Execute 方法 语法 :
Set recordset=Connection.Execute(CommandText,RecordsAffected,Options) 参数说明 : CommandText 一个字符串 ,返回要执行的 SQL 命令 ,表名 ,存储过程或指定文本 . RecordsAffected 可选项 ,Long 类型的值 ,返回操作影响的记录数 . Options 可选项 ,Long 类型值 ,指明如何处理 CommandText 参数 .
使用 connection 的 execute 方法返回记录集:
dim cn as new adodb.connectiondim rs as new adodb.recordsetDim cnstring$,strsql$Cnstring=“driver={SQL Server};server=127.0.0.1;da
tabase=student;uid=sa;pwd=”Strsql =“select * from 基本情况 where 班级 =‘05网
一’ or 班级 =‘05网二’”Cn.open cnstringSet Rs=cn.execute (strsql)
3. 使用 Command 对象的 Execute 方法执行 CommandText 属性中设置的 SQL 命令 ,返回查询记录集 .Command 对象的 Execute 方法的语法如下 :
Command.Execute RecordsAffected, Parameters, Options ' 不返回记录集或者 Set Rscordset=
command.Execute(RecordsAffected,Parameters,Options) ' 返回记录集
CommandText 的语法为 : Command.CommandText=stringvariable 其中 : stringvariable 为字符串变量 ,包含 SQL 语句 ,表名或存储过程 .
使用 command 对象 的 execute 方法返回记录集:dim cn as new adodb.connectiondim rs as new adodb.recordsetDim cmd as new adodb.commandDim cnstring$,strsql$Cnstring=“driver={SQL Server};server=127.0.0.1;dat
abase=student;uid=sa;pwd=”Strsql =“select * from 基本情况 where 班级 =‘05网
一’ or 班级 =‘05网二’”Cn.open cnstringcmd.activeconnection=cncmd.commandtext=strsqlSet Rs=cmd.execute
使用记录集 reordset
(a) 添加新的记录 : 在 ADO 中添加新的记录用的方法为 :AddNew 它的语法为 : Recordset.AddNew FieldList, Values Recordset 为记录集对象实例 FieldList 为一个字段名 ,或者是一个字段数组 . Values 为给要加信息的字段赋的值 ,如果 FiledList 为一个字段名 ,那么 Values 应为一个单个的数值 ,假如 FiledList 为一个字段数组 ,那么 Values 必须也为一个个数、类型与 FieldList 相同的数组 . 用完 AddNew 方法为记录集添加新的记录后 ,应使用 UpDate 将所添加的的数据存储在数据库中 .
(b) 删除记录 在 ADO 中删除记录集中的数据的方法为 :Delete 方法 ,这与 DAO 对象的方法相同 ,但是在 ADO中它的能力增强了 ,可以删掉一组记录了 . 它的语法如下 : Recordset.Delete AffectRecords 其中的 ,AffectRecords 参数是确定 Delete方法作用的方式的 ,它的取值如下 : adAffectCurrent 只删除当前的记录 adAffectGroup 删除符合 Filter 属性设置的那些记录 .为了一次能删除一组数据 ,应设置Filter 属性 .
(c) 查询记录 在 ADO 中查询的方法很灵活 ,有几种查询的方法 . 实际上记录集返回的是一个从数据库取回的查询结果集 .因此有三种打开方法 :
•一种使用记录集的 Open 方法 ,•另一种是用 Connection 对象的 Execute 方法 .•使用 Command 对象的 Execute 方法执行 CommandText属性中设置的 SQL 命令 ,返回查询记录集 .
将记录集与数据绑定控件进行绑定,即可显示记录信息。
常见步骤:1. 打开 Connection 对象
Dim cn As ADODB.Connection’声明 ADODB.Connection 对象变量Dim strcn As String’声明存放连接串的字符串变量Set cn= New ADODB. Connection’ 实例化 Connection 对象’生成连接串( ConnectionString)strcn=" driver={SQL Server};server=127.0.0.1;database=student;uid=sa;pwd=”
’调用 Connection 对象的方法 Open 连接数据源 Cn.open strcn
2. 创建 Command 对象 Dim cmd As ADODB.Command
’ 实例化 Command 对象 Set cmd=New ADODB. Command
3. 执行查询以 Command 对象为例。 Dim rs As New ADODB.Recordset
Set cmd.ActiveConnection=cn’绑定激活的 Connection对象实例cmd.CommandText=“SELECT * from s”’生成 SQL脚本Set rs=cmd.Execute’ 执行查询
上述的代码仅仅是一种查询途径,此外, ADO 的 Connection 对象的 Execute 方法和 Recordset 对象的 Open 方法也提供了查询能力。返回的结果可以被保存在一个 Recordset对象实例中以便后续的数据处理和操纵。
4. 显示和操纵数据rs.MoveFirstDo While Not rs.EOF ’判断 EOF标记属性( Endoffile)
Print rs!sno + rs!sname + rs!sex + rs!class + rs!birthday + rs!telephone +rs!address +rs!email ‘输出记录的值
rs.MoveNext’将游标指针移到下一条记录
Loop 访问 recordset 对象字段的方法:Rs(“学号” )
Rs!学号
Rs(0)
Rs.fields(0)
Rs.fields(“学号” )
5. 更新记录 使用 Recordset 对象来完成 Update 操作。
rs.Close’关闭之前建立的结果集’打开新的结果集,具有写操作权限rs.Open“s”,cn,adOpenDynamic,adLockOptimisticrs.MoveFirst’虽无必要,但可能是一个良好的习惯rs!sname=“张三” ’对相应字段赋予新值rs.Update’ 在物理存储上生效
除了 Update 以外,写操作还包括 AddNew(添加一条新记录)和 Delete(删除一条新记录)。
需要注意的是,当使用 Recordset 对象完成写操作时,需要预先指定 Recordset 对象实例非只读。
6. 收尾工作 如果不做的话,通常 VisualBasic会自
动释放和回收资源。但一个合格的程序员,应养成良好的回收习惯。
rs.CloseSet rs=NothingSet cmd=Nothingcn.CloseSet cn=Nothing