8.2.6 集合 ADO对象库中有一些集合,每个集合都有零个或更多个与其关联的对象的拷贝。可以使用相同的代码结构去遍历这些集合。 在VBScript中的语法是: For Each object In Collection ' Do something with object Next 例如,遍历一个Recordset对象的Fields集: For Each objField In rs.Fields Response.Write objField.Name & "<BR>" Next 如果选择JScript,那么可以使用Enumerator对象: for (objField = new Enumerator(rs.Fields); !objField.atEnd(); objField.moveNext()) Response.Write (objField.item().Name + '<BR>'); 1. Fields集合 Fields集合拥有与记录集或记录关联的Field对象。对基于结构化数据的记录集,比如SQL数据,字段相应于数据中的列,并含有列的详细内容,比如名称、数据类型、长度等等。在以后几章看到大量的关于Fields集合的例子。 对于半结构化的数据,对象的属性相应于字段。在第12章会看到更多的相关的介绍。 2. Parameters集合 Parameters集合仅被Command对象使用,确定在存储命令中的参数。SQL数据库中的存储过程频繁地使用参数,并允许数据传入和传出预定义的SQL语句。如果拥有向ADO返回信息的参数,则会十分有用,因为这样从存储过程中返回的就不只是一个记录集。例如,考虑一个更新多个表然后返回一个记录集的复杂存储过程,可以用一个输出参数显示更新了多少条记录。 另一个使用参数的理由是性能问题,特别是在仅仅需要从存储过程返回单个值的时候。在这种情况下,没有创建记录集的必要,只需要保存一个值即可,因而不需要返回记录集,而返回输出参数的值是更为有效的方法。 在第9章会看到有关Parameter集合的详细介绍。 3. Error集合 Error集合包含因运行命令而引起的上一次ADO或OLE DB提供者错误的详细内容,只能被Connection对象访问。可能会觉得这是个限制,因为不必显式定义Connection对象,但可以通过Command、Recordset和Record对象的ActiveConnection属性访问隐含的Connection对象。例如: For Each objError In rs.ActiveConnection.Errors Response.Write objError.Name & "<BR>" Next 在本章后面,将详细讨论Error集合。 4. Properties集合 为了避免混乱,Properties集合没有在前面的对象模型图上加以显示。它与对象模型的关系显示在图8-5中: Properties集合存在的原因是因为ADO是用来处理许多不同的数据存储,都有不同的特征。将属性(Property)组成一个集合,可以使之能够动态地根据不同的数据提供者而随时改变。例如,Jet的OLE DB提供者允许访问Jet特殊的安全属性: Set conDB = Server.CreateObject ("ADODB.Connection") conDB.Open "DSN=Nwind"