ADO对象模型定义了一组可以编程对象,可以实现OLE DB的几乎所有的功能。ADO对象模型中包含了7个对象:
●Connection对象
●Command对象
●Parameter对象
●Recordset对象
●Field对象
●Property对象
●Error对象
ADO对象模型中还包含了3个集合:
●Fields集合
●Properties集合
●Errors集合
它们之间的关系如下图:
1.Connection对象
Connection对象用来与数据源建立连接、执行查询以及建立事务处理。在建立连接之前,必须指定使用哪一个OLE DB供应者。如果Provider属性设为空串,那么连接采用缺省的OLE DB供应者。也可以设置Connection对象的ConenectionString属性来间接设置Provider属性。例如按下面语句设置ConenectionString属性后,OLE DB供应者会是Microsoft OLE DB Provider For SQL Server。
而如果按照下面的语句的设置,OLE DB供应者将会是缺省的ODBC Provider:
当设置好了connectionstring属性后,用Conenection对象的Open方法来与数据库建立连接。例如下面的代码用ODBC供应者与SQL Server数据库建立一个连接:
Dim cnn1 as ADODB.Connection=New ADODB.Connection
strCnn="driver={SQL Server};server=srv;"&uid=sa;pwd=;database=pubs"
Cnn1.Open strCnn
当建立连接以后可以用Conenection对象的Execute方法进行查询,包含SQL语句、存储过程或者OLE DB供应者,它从一个文本文件中返回数据,当把一个目录作为其数据源时,Execute方法的返回结果将是文本文件Custom.txt中的数据。
可以用Conenection进行事务处理。在事务处理方面,conenection对象提供了三个方法:
BeginTrans、CommitTrans和RollbackTrans。在数据修改之前,用BeginTrans方法开始事务处理,当数据修改以后,可以用CommitTrans方法提交事务,或者用RollbackTrans方法加滚事务。例如:
2.Command对象
Command对象执行数据库操作命令,这些命令并不只限于查询串,而是依赖于数据库的OLE DB供应者。以下的讨论假定使用ODBC供应者。
使用Command对象可以建立一个新的连接,也可以使用当前已经建立的连接,这取决于对象"ActiveConection"属性的设置。如果"Activeconection"属性被设置为一个Connection对象的引用,那么Command对象就建立一个新的连接,并使用这个新连接。每个Connection对象可以包含多个Command对象。
用Command对象执行一个查询子串,可以返回一个记录集,也可以返回多个记录集,甚至可以不返回记录集。对象的"CommandText"属性中包含了要执行的查询字串。一个查询可以是一个标准的SQL数据操作语言,如SELECT、DELETE、UPDATE,等;也可以是任何数据定义语言,如CREATE、DROP等;还可以是一个存储过程或一个表。究竟CommandText中是哪一种查询字串,由对象的"CommandType"属性决定。"CommandType"属性有四种不同的值:adCmdText,adCmdTable,adCmdStoreProc和adCmdUnknow。如果查询字串是一个SQL语句,那么"CommandType"属性应设为"adCmdText";如果查询字串是一个存储过程的名字,那么"CommandType"属性应该为"adCmdStoreProc",Command对象用{call procedure=name}的形式来执行一个存储过程;如果查询字串是一个表名,那么"CommandType"属性应该设为"adCmdTable",Command对象用"Select * from Tablename"的形式来执行一个查询;如果"CommandType"属性被设置为"adCmdUnknown",Command对象必须执行一些额外的步骤来决定查询字串的类型,这样会降低系统的性能。
如果要执行一个带参数的查询,或者要执行一个查询若干次,那么可以用Command对象的"Prepared"属性预先建立一个查询字串。
假如有这样一个SQL Server的存储过程:
3.Parameters集合和Parameter对象
Parameters集合和Parameter对象为Command对象提供参数信息和数据。当且仅当Command对象执行的查询是一个带参数的查询时,Parameters集合和Parameter对象才有用,Parameter对象包含在Parameters集合中。Parameter对象中可以包含4种类型的参数:输入、输出、输入输出和返回值类型。
用Command对象的CreateParameter方法来创建一个Parameter对象,Createparameter方法的语法如下,5个参数分别是:参数名、参数的数据类型、参数类型(输入输出等)、参数的长度和参数的值。
4.Recordset对象
Recordset对象用来操作查询返回的结果集,它可以在结果集中添加、删除、修改和移动记录。当创建了一个Recordset对象时,一个游标也被自动创建了。可以用Recordset对象的CursorType属性来设置游标的类型。游标的类型有4种:仅能向前移动的游标、静态的游标、键集游标和动态游标。这已经在DAO中的Recordset对象和RDO的rdoResultset对象中介绍过了。
下面这个例子建立一个Recordset,并循环打印出结果集中的记录的第一个字段的值。
5.Fields集合和Fields对象
Fields集合和Fields对象用来访问当前记录中的每一列的数据,可以用Fields对象创建一个新记录、修改已存在的数据等。用Recordset对象的AddNew、Update和UpdateBatch方法来添加新记录和更新记录。也可以用Fields对象来访问表中每一个字段的一些属性,如下面的例子循环打印出表中当前记录的字段名称、类型和值。
6.Properties集合和Property对象
ADO对象有两种类型的属性:一种是内置的,另一种是动态的。内置的属性不出现在对象的Properties集合中,而动态的属性是由OLE DB供应者定义的,它们出现在相应的ADO对象的Properties集合中。Connection、Command、Recordset和Field对象包含有Properties集合,Properties集合中包含了Property对象,它们负责提供四个对象的特征信息。Property对象只有一个"Attributes"属性,这个属性描述了某个特定属性是否被OLE DB供应者支持,或者是否必须赋值,或者是否能读写。Property对象的另外三个属性为"Name"、"Type"和"Value",分别表示Property对象所描述的ADO对象的属性名称、数据类型和属性值。
下面这个例子取得Connection对象的"ConnectTimeout"属性值和Command对象的"CommandTimeout"属性。