ADO对象编程.docx
《ADO对象编程.docx》由会员分享,可在线阅读,更多相关《ADO对象编程.docx(33页珍藏版)》请在冰豆网上搜索。
![ADO对象编程.docx](https://file1.bdocx.com/fileroot1/2023-2/22/736b6e4a-2346-441e-869b-be47e5c50c13/736b6e4a-2346-441e-869b-be47e5c50c131.gif)
ADO对象编程
补充1:
ADO对象编程
1.1ADO基础
1.1.1ADO的介绍
ADO是ActiveXDataObject的缩写,它是Microsoft数据库应用程序开发的新接口,是Microsoft新的数据访问技术,是建立在OLEDB之上的高层数据库访问技术。
ADO被设计用来同新的数据访问层OLEDBProvider一起协同工作,以提供通用数据访问(UniversalDataAccess)。
OLEDB是一个低层的数据访问接口,用它可以访问各种数据源,包括传统的关系型数据库,以及电子邮件系统及自定义的商业对象
即使对OLEDB不了解也能轻松使用ADO,因为它非常简单易用,并不失灵活性。
ADO向VB程序员提供了很多好处,包括易于使用、熟悉的界面,高速度以及较低的内存占用。
同传统的数据对象层次(DAO和RDO)不同,ADO可以独立建立。
因此可以只创建一个“Connection”对象,但是可以有多个,独立的“Recordset”对象来使用它,另外ADO针对客户/服务器以及Web应用程序作了优化。
ADO最基本的操作流程:
初始化COM库,引入ADO库定义文件;用Connection对象连接数据库;利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理;使用完毕后关闭连接释放对象。
1.1.2AD0的对象
1.数据库连接对象——Connection
这是ADO的最大特点。
每一次引用数据库可以建立一个连接对象,然后在其之上建立多个RecordSet对象,方便远程连接的操作。
建立一个Connection的方法很简单,下面例子主要介绍了Connection对象的创建、连接数据库以及关闭连接的方法:
SubConnectionExample()
DimcnnasADODB.connection
Setcnn=newADODB.connection
’通过ODBCDSN打开数据库
cnn.open“pubs”,”sa”,””
’检查是否成功建立连接对象
ifcnn.state=adStateOpenthen
msgbox“Welcometopubs!
”
else
msgbox“Sorry,nopubs!
”
endif
’关闭连接对象
cnn.close
Endsub
其重要属性如表1—1所示。
表1-1Connection对象属性列表
属性
功能
ConnectionString
打开Connection时的参数设置。
主要有以下几项:
Provider、FileName、RemoteProvider、RemoteServer、URL
DefaultDatabase
定义Connection对象的缺省数据库
Provider
定义Connection对象的数据库OLEDB的提供者,如SQLServer之类
State
当前状态,只读。
主要返回值为adStateOpen或adStateExecuting
其重要方法如表1—2所示。
表1-2Connection对象方法列表
方法
功能
BeginTrans
开始一个新的处理事务(Transaction)
RollbackTrans
放弃当前所有的处理事务并开启一个新的事务
Cancel
终止当前的数据库操作
Close
关闭释放Connection对象
Execute
执行SQL语言,或者查询
Open
打开Connection对象
在建立连接对象后,可以通过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对象也是ADO的特色之一。
一般用于大量数据的操作或者是对数据库表单结构的操作。
Command的重要属性如表1-3所示,重要方法如表1-4所示。
表1-3Command对象属性列表
属性
功能
ActiveConnection
指定当前命令对象属于哪个Connection
CommandStream
指定提供命令参数的流
CommandText
指定参数
Dialect
指定参数的语法规范
State
Command对象运行状态
表1-4Command对象方法列表
方法
功能
Cancel
放弃操作
CreateParameter
创建参数
Excute
执行参数
4.字段对象——Field
Field对象代表使用普通数据类型的数据的列。
Recordset对象含有由Field对象组成的Fields集合。
每个Field对象对应于Recordset中的一列,其重要属性如表1-5所示。
表1-5Field对象属性列表
属性
功能
Name
返回字段名
DefineSize
返回己声明的字段大小
Value
查看或更改字段中的数据
ActualSize
返回给定字段中数据的实际大小
NativeError
指示给定Error对象的、特定提供者的错误代码
重要方法如表1-6所示。
表1-6Field对象方法列表
属性
功能
AppendChunk
将数椐追加到大型文本、二进制数据中
GetChunk
返回大型文本或二进制数据Field对象的全部或部分内容
5.错误集合——Errors(了解)
Error对象包含与单个操作(涉及提供者)有关的数据访问错误的详细信息。
任何涉及ADO对象的操作都会生成一个或多个提供者错误。
每个错误出现时,一个或多个Error对象将被放到Connection对象的Errors集合中。
当另一个ADO操作产生错误时,Errors集合将被清空,并在其中放入新的Error对象集。
每个Error对象都代表特定的提供者错误而不是ADO错误,ADO错误被记载到运行时例外处理机制中。
例如,在MicrosoftVisualBasic中,产生特定AD0的错误将触发OnError
事件并出现在Err对象中。
Error的主要属性如表1-7所示。
表1-7Error对象属性列表
属性
功能
Description
包含错误的文本
Number
包含错误常量的长整型数目
Source
标识产生错误的对象。
在向数据源发出请求之后,如果Errors集合中有多个Error对象,则将会用到该属性
SQLState
指示给定Error对象的sQL状态
NativeError
指不给定Errorr对象的、特定提供者的错误代码
出现提供者错误时,Error对象将被放在Connection对象的Error集合中。
ADO支持由单个ADO操作返回多个错误,以便显示特定提供者的错误信息。
要在错误处理程序中获得丰富的错误信息,可使用相应的语言或所在工作环境下的错误捕获功能,然后使用嵌套循环枚举出Errors集合的每个Error对象的属性。
Errors集合的重要方法如表1-8所示。
表1-8Error集合的方法列表
方法
功能
Clear
删除集合中的所有对象
Item
根据名称或序号返回集合的特定成员
1.2用ADO对象操纵数据库
在使用ADO对象操作数据库时,主要采取如下的步骤和方法:
·打开数据库。
首先需要创建数据库连接对象(connection),然后调用该对象的Open方法即可打开数据库。
·操作数据库数据。
在数据库打开之后,通过Connection、Command对象执行SQL命令,或者创建记录集(Recordset)对象,使用该对象的各种方法就可以进行数据库数据的查询、定位以及增加、删除和修改。
·关闭数据库。
使用上面创建的数据库连接对象的close方法就可以进行数据库的关闭。
下面就分别详细介绍以上所说的各个步骤和方法。
1.2.1AD0连接数据库
1.连接到ODBC数据源
当前使用的所有DBMS(数据库管理系统)系统实际上都可以通过ODBC进行访问。
MicrosoftODBCProvider允许ADO连接到任何ODBC的数据源。
ODBC驱动程序对于当今使用的各种主要DBMS都有效,包括MicrosoftSQLServer、MicrosoftAccess(MicrosoftJet数据库引擎)和MicrosoftFoxPro以及诸如Oracle等非Microsoft数据库产品。
要连接MicrosoftODBCProvider,就需要将连接字符串属性(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的驱动程序(DRIVER=),诸如;“SQLServer”、服务器名(SERVER=)和数据库名(DATABASE=)。
也可以在特定ODBC的参数或标准ADO定义的UserID和Password参数中为用户帐号:
指定用户账号名(UID=)和密码(PWD=)。
即使DSN定义已经指定了数据库,也可以在DSN之外指定DATABASE参数以便连接到不同的数据库。
这同时更改了DSN定义以包括指定的数据库。
使用DSN时始终包括DATABASE参数是一种好办法。
这样将保证能连接到正确的数据库,因为其他用户可能会在上一次检查DSN定义后更改默认的数据库参数。
2.连接到Access数据库
可以使用指定OLEDB提供者和连接字符串来连接Access数据文件。
例如:
setcon=newADODB.connection
con.Open"provider=Microsoft.Jet.OLEDB.4.0;
DataSource=c:
\library.mdb;PersistSecurityInfo=False"
其中c:
\library.mdb为数据库的路径和名称。
如果数据库有密码,则:
Provider=Microsoft.Jet.OLEDB.4.0;Password=sa;UserID=rose;DataSource=c:
\library.mdb;PersistSecurityInfo=True
其中rose为用户名;sa为密码
如果数据库是局域网其他计算机上的,那么这个数据库所在的至少上一层目录为共享,采用下面办法:
Provider=Microsoft.Jet.OLEDB.4.0;UserID=rose;DataSource=
\\qyKong\data\library.mdb;PersistSecurityInfo=False
这里“\\qyKong\data\library.mdb”为在网络邻居中名qyKong的机器上(IP也可以)上的data文件夹下的名为library的Access数据。
3.连接到SQLServer数据源
以下范例通过打开3个使用不同提供者的Connection对象演示Provider属性,还使用DefaultDatabase属性设置MicrosoftODBC提供者的默认数据库。
PrivateSubProviderx()
Dimcnn1AsADODB.Connection
Dimcnn2AsADODB.Connection
Dimcnn3AsADODB.Connection
'使用MicrosoftODBC提供者打开数据库
Setcnn1=NewADODB.Connection
cnn1.ConnectionString="driver={SQLServer};"&_
"server=bigsmile;uid=sa;pwd=pwd"
cnn1.Openstrcnn
cnn1.DefaultDatabase="Pubs"
'显示提供者
MsgBox"cnn1provider:
"&cnn1.Provider
'使用MicrosoftJet提供者打开数据库
Setcnn2=NewADODB.Connection
cnn2.Provider="Microsoft.Jet.OLEDB.3.51"
cnn2.Open"c:
\samples\northwind.mdb","admin"
'显示提供者
MsgBox"cnn2provider:
"&cnn2.Provider
'使用MicrosoftSQL服务器提供者打开数据库
Setcnn3=NewADODB.Connection
cnn3.Provider="sqloledb"
cnn3.Open"Datasource=srv;InitialCatalog=pubs;","sa"
'显示提供者
MsgBox"cnn3provider:
"&cnn3.Provider
cnn1.Close
cnn2.Close
cnn3.Close
EndSub
通过以上介绍,可以总结出ADO与不同数据库连接所使用的连接字符串如下:
●ODBC连接
1ODBC-DSN连接
方法:
cnn.Open"dsn=advWorks;uid=admin;pwd=;"
advWorks为数据源名。
②ODBC-FileDSN连接
方法:
cnn.Open"filedsn=c:
\somepath\mydb.dsn;uid=admin;pwd=;"
③ODBCDriverforAccess
方法:
cnn.Open"driver={MicrosoftAccessDriver(*.mdb)};dbq=c:
\somepath\mydb.mdb;uid=admin;pwd=;"
④ODBCDriverforSQLServer
方法:
cnn.Open"driver={SQLServer};server=myServerName;database=myDatabaseName;uid=admin;pwd=;"
●OLEDBProvider连接
1OLEDBProviderForMicrosoftJet
方法:
con.Open"provider=Microsoft.Jet.OLEDB.4.0;DataSource=c:
\somepath\mydb.mdb;uid=admin;pwd=;"
2OLEDBProviderForODBCDatabase
Access(Jet)方法:
cnn.Open"Provider=MSDASQL;driver={MicrosoftAccessDriver(*.mdb)};dbq=c:
\somepath\mydb.mdb;uid=myUserName;pwd=myPassWord;"
SQLServer:
方法:
cnn.Open"Provider=MSDASQL;driver={SQLServer};server=myServerName;database=myDatabaseName;uid=myUserName;pwd=myPassWord;"
●MSremote连接
1MSremoteforAccess(Jet)
通过ODBCDSN方法:
cnn.Open"Provider=MSremote;RemoteServer=http:
//myServerName;RemoteProvider=MSDASQL;dsn=advWorks;uid=myUserName;pwd=myPassWord;"
通过OLEDBProvider方法:
cnn.Open"Provider=MSremote;RemoteServer=http:
//myServerName;RemoteProvider=Microsoft.Jet.OLEDB.4.0;database=myDatabaseName;uid=admin;pwd=;"
2MSremoteforSQLServer
通过ODBCDSN方法:
cnn.Open"Provider=MSremote;RemoteServer=http:
//myServerName;RemoteProvider=MSDASQL;dsn=myDataSourceName;
uid=myUserName;pwd=myPassWord;"
通过OLEDBProvider方法:
cnn.Open"Provider=MSremote;RemoteServer=http:
//myServerName;RemoteProvider=SQLOLEDB;dataSource=myServerName;
InitialCatalog=myDatabaseName;uid=myUserName;pwd=myPassWord;"
1.2.2用记录集(Recordset)对象操纵数据
记录集(Recordset)对象是ADO操作数据最常用的对象,也是学习的关键所在。
1.创建、打开RecordSet对象以及浏览数据记录
下面来学习一个例子(例6.0):
注意:
要想在程序中使用ADO对象,必须先为当前工程引用ADO的对象库。
引用方式是执行“工程”菜单的“引用”命令,启动引用对话框,在清单中选取“MicrosoftActiveXDataObjects2.0Library”选项。
PublicSubADOOopenRecords()
DimcnnAsADODB.Connection
DimrstAsADODB.Recordset
DimfldAsADODB.Field
'打开连接
Setcnn=NewADODB.Connection
cnn.Open"provider=Microsoft.Jet.OLEDB.4.0;DataSource="&App.Path&"\northwind.mdb;PersistSecurityInfo=False"
'打开方式forward_only,read_only
Setrst=NewADODB.Recordset
rst.Open"select*from客户where地区='WA'",cnn,adOpenForwardOnly,adLockReadOnly
'输出第一个记录的所有字段值
ForEachfldInrst.Fields
Debug.Printfld.Value&";";
Next
Debug.Print
'关闭数据记录集对象
rst.Close
cnn.Close
EndSub
至于Move,MoveNext,MoveFirst之类的方法,和DAO用法相同。
2.查询数据记录
ADO的查询数据库记录只有Find方法,该方法允许使用一个查找字符串,它由单引号(’)或数码符号(#)加以封闭。
双引号(”)不能使用,数码符号必须封闭数值。
如果使用Like操作符,就可以用星号(*)作为字符串值中的通配符。
然而,星号必须是值中的最后一个字符或值中的唯一字符。
否则会发生运行时错误。
除了搜寻条件外,Find方法还有几个参数。
应指明开始搜索时要跳过的记录数;否则,搜索从当前记录开始。
当要开始搜索下一个值时,应当指明一个起始值。
在记录集中也可以指明是否向回搜索(相开头)或者向前(向尾部),可以通过指明书签作为搜索的开始位置。
find方法的调用语法是:
RstName.FindstrCriteria[,IngSkipRecords,IngSearchDirection[,varStart]]
其中strCriteria是查找条件,比较符仅限于“=”、“>”、“<”、“>=”、“<=”和“LIKE”,比较只是针对于表中的单个字段。
3.增、删、改数据记录
ADO可以用与DAO完全相同的方法进行添加、删除的操作。
唯一不同的是要先建立一个connection对象。
ADO还提供了一种快捷的添加方式:
Rst.AddNewArray("CompanyName","Phone"),Array("ABCDCO","(010)123-4567")
修改现有记录时,ADO不需要调用Edit方法,直接对当前记录某字段属性赋值之后调用update方法就可以实现。
4.构造无数据源的数据集
所述的无“数据源”连接,意义不是不需要数据源,否则连接无从谈起,而是不需要配置注册数据源所进行的连接。
ODBC是用不同数据源的标准编程语言接口。
根据前面的有关章节介绍,在实现ODBC时,必须首先配置ODBC环境,进行数据源的注册,然后才能在对数据库编程时,对数据源进行连接、访问和操作。
ADO