的情况,以及对当前任务的适用性选择使用任一种对象。
从Connection对象运行的命令一般是查询动作,但了解能够得到返回的记录集也是非常有用的。
9.1.1 返回一个记录集
为了从Connection对象返回一个记录集,要使用Execute方法。语法是:
Connection.Execute CommandText, [RecordsAffected], [Options]
参数及说明如表9-1所示:
表9-1 Connection对象的Execute方法的参数及说明
参 数
说 明
CommandText
执行的命令文本。与Recordset的Open方法中的Source参数相同,也能代表一个现有的Command对象
RecordsAffected
受命令执行影响的记录数
Options
命令选项,可以是一个或多个CommandTypeEnum或ExecuteOptionEnum常数,详细的值请见上一章
Execute方法可选择地返回一个记录集,在这种情况下只要将返回值赋给记录集变量。例如:
Set conPubs = Server.CreateObject("ADODB.Connection")
conPubs.Open strConn
Set rsAuthors = conPubs.Execute("Authors")
读者可能会奇怪使用Connection对象的Execute方法与使用Recordset对象的Open方法之间到底有什么区别?看上去区别不是很大,使用Recordset对象的Open方法可以改变光标类型和锁定类型。这些选项对于Connection对象的Execute方法是不可用的,因此永远只能得到一个只能前移的、只读的记录集。
9.1.2 操作命令
如果正在运行操作命令,比如一个SQL UPDATE语句,那么可以使用RecordAffected参数找出有多少条记录受到该命令的影响。例如:
Dim strSQL As String
Dim lngRecs As Long
strSQL = "UPDATE Titles SET Price = Price * 1.10" & "WHERE Type='Business'"
conPubs.Execute strSQL, lngRecs, adCmdText
Response.Write lngRecs & " records were updated."
上述代码将所有类型为Business的书的单价增加了10%。一旦Execute命令执行完毕,受Update命令影响的记录数就返回到变量lngRecs中,这就是RecordsAffected参数。
注意,已经为命令指定了adCmdText选项,告诉ADO CommandText参数是一个文本命令。一般这不是严格必须的,其目的只是让ADO预先知道执行的命令属于何种类型,这样能够提高性能。记住,这个值可以是一个或多个CommandTypeEnum值。
无记录集返回
如果上面的例子不返回记录集,那么在Execute语句中加入另一个选项也是较好的方法:
conPubs.Execute strSQL, lngRecs, adCmdText + adExecuteNoRecords
使用adExecuteNoRecords告诉ADO执行的命令不返回任何记录。所以,ADO不必费心去创建一个记录集。如果省略了该选项,那么ADO将会创建一个空的记录集,很明显这浪费了时间,因此加上这个选项会加快语句的执行。
9.2 Command对象
Command对象特定地为处理各种类型的命令而设计,特别是那些需要参数的命令。与Connection对象相似,Command对象可以运行返回记录集和不返回记录集两种类型的命令。实际上,如果命令不含有参数,那么它并不关心是使用Connection对象,还是Command对象,还是Recordset对象。
9.2.1 返回记录集
对于一个返回记录集的命令,可使用Execute方法。然而,与Connection对象不同,必须使用CommandText属性,而不能在Execute方法中使用命令文本。
Set cmdAuthors = Server.CreateObject("ADODB.Command")
cmdAuthors.CommandText = "Authors"
Set rsAuthors = cmdAuthors.Execute
这是告诉Command对象去执行一个简单的、返回一个只读记录集的命令的最简单方法。
Execute方法也有一些可选参数,如表9-2所示:
表9-2 Command对象的Execute方法的参数及说明
参 数
说 明
RecordsAffected
受命令影响的记录数
Parameters
参数值数值
Options
命令选项,与Recordset的Open方法中的Options选项相似
参数RecordsAffected与Options同前面解释的一样,另外也可以使用CommandType属性设置命令类型:
Set cmdAuthors = Server.CreateObject("ADODB.Command")
cmdAuthors.CommandText = "Authors"
cmdAuthors.CommandType = adCmdTable
如果不设置其他参数,也可以在Execute行上设置,必须为它们使用逗号:
Set rsAuthors = cmdAuthors.Execute(, , adCmdTable)
在本章后面处理存储过程时,将会看到参数Parameters的用途。
改变光标类型
值得注意是,使用Execute方法返回的记录集具有缺省的光标类型。这意味着这是只能前移的、只读的记录集。虽然使用Execute方法不能改变这种情况,但对这个问题有一个解决的方法。
如果需要使用一个命令,并且要求不同的光标和锁定类型,那么应该使用Recordset的Open方法,此时Command对象作为Recordset的数据源。例如:
cmdAuthors.ActiveConnection = strConn
cmdAuthors.CommandText = "Authors"
cmdAuthors.CommandType = adCmdTable
rsAuthors.Open cmdAuthors, , adOpenDynamic, adLockOptimistic
注意,在Open命令行中忽略了连接细节,因为连接设置在Command对象中。连接细节在命令打开前已经设置在Command对象的ActiveConnection属性中。
9.2.2 操作命令
对于操作命令,比如那些无记录返回的更新命令,整个过程相似,只需移去设置记录集的代码:
Set cmdUpdate = Server.CreateObject("ADODB.Command")
strSQL = "UPDATE Titles SET Price = Price * 1.10" & "WHERE Type='Business'"
cmdUpdate.ActiveConnection = strConn
cmdUpdate.CommandText = sSQL
cmdUpdate.CommandType = adCmdText
cmdUpdate.Execute , , adExecuteNoRecords
注意,我们在此设置了命令类型,然后在Execute行中增加了额外的设置选项。这段代码运行UPDATE命令,并且保证不会创建新的记录集。
从Connection对象运行的命令一般是查询动作,但了解能够得到返回的记录集也是非常有用的。
9.1.1 返回一个记录集
为了从Connection对象返回一个记录集,要使用Execute方法。语法是:
Connection.Execute CommandText, [RecordsAffected], [Options]
参数及说明如表9-1所示:
表9-1 Connection对象的Execute方法的参数及说明
参 数
说 明
CommandText
执行的命令文本。与Recordset的Open方法中的Source参数相同,也能代表一个现有的Command对象
RecordsAffected
受命令执行影响的记录数
Options
命令选项,可以是一个或多个CommandTypeEnum或ExecuteOptionEnum常数,详细的值请见上一章
Execute方法可选择地返回一个记录集,在这种情况下只要将返回值赋给记录集变量。例如:
Set conPubs = Server.CreateObject("ADODB.Connection")
conPubs.Open strConn
Set rsAuthors = conPubs.Execute("Authors")
读者可能会奇怪使用Connection对象的Execute方法与使用Recordset对象的Open方法之间到底有什么区别?看上去区别不是很大,使用Recordset对象的Open方法可以改变光标类型和锁定类型。这些选项对于Connection对象的Execute方法是不可用的,因此永远只能得到一个只能前移的、只读的记录集。
9.1.2 操作命令
如果正在运行操作命令,比如一个SQL UPDATE语句,那么可以使用RecordAffected参数找出有多少条记录受到该命令的影响。例如:
Dim strSQL As String
Dim lngRecs As Long
strSQL = "UPDATE Titles SET Price = Price * 1.10" & "WHERE Type='Business'"
conPubs.Execute strSQL, lngRecs, adCmdText
Response.Write lngRecs & " records were updated."
上述代码将所有类型为Business的书的单价增加了10%。一旦Execute命令执行完毕,受Update命令影响的记录数就返回到变量lngRecs中,这就是RecordsAffected参数。
注意,已经为命令指定了adCmdText选项,告诉ADO CommandText参数是一个文本命令。一般这不是严格必须的,其目的只是让ADO预先知道执行的命令属于何种类型,这样能够提高性能。记住,这个值可以是一个或多个CommandTypeEnum值。
无记录集返回
如果上面的例子不返回记录集,那么在Execute语句中加入另一个选项也是较好的方法:
conPubs.Execute strSQL, lngRecs, adCmdText + adExecuteNoRecords
使用adExecuteNoRecords告诉ADO执行的命令不返回任何记录。所以,ADO不必费心去创建一个记录集。如果省略了该选项,那么ADO将会创建一个空的记录集,很明显这浪费了时间,因此加上这个选项会加快语句的执行。
9.2 Command对象
Command对象特定地为处理各种类型的命令而设计,特别是那些需要参数的命令。与Connection对象相似,Command对象可以运行返回记录集和不返回记录集两种类型的命令。实际上,如果命令不含有参数,那么它并不关心是使用Connection对象,还是Command对象,还是Recordset对象。
9.2.1 返回记录集
对于一个返回记录集的命令,可使用Execute方法。然而,与Connection对象不同,必须使用CommandText属性,而不能在Execute方法中使用命令文本。
Set cmdAuthors = Server.CreateObject("ADODB.Command")
cmdAuthors.CommandText = "Authors"
Set rsAuthors = cmdAuthors.Execute
这是告诉Command对象去执行一个简单的、返回一个只读记录集的命令的最简单方法。
Execute方法也有一些可选参数,如表9-2所示:
表9-2 Command对象的Execute方法的参数及说明
参 数
说 明
RecordsAffected
受命令影响的记录数
Parameters
参数值数值
Options
命令选项,与Recordset的Open方法中的Options选项相似
参数RecordsAffected与Options同前面解释的一样,另外也可以使用CommandType属性设置命令类型:
Set cmdAuthors = Server.CreateObject("ADODB.Command")
cmdAuthors.CommandText = "Authors"
cmdAuthors.CommandType = adCmdTable
如果不设置其他参数,也可以在Execute行上设置,必须为它们使用逗号:
Set rsAuthors = cmdAuthors.Execute(, , adCmdTable)
在本章后面处理存储过程时,将会看到参数Parameters的用途。
改变光标类型
值得注意是,使用Execute方法返回的记录集具有缺省的光标类型。这意味着这是只能前移的、只读的记录集。虽然使用Execute方法不能改变这种情况,但对这个问题有一个解决的方法。
如果需要使用一个命令,并且要求不同的光标和锁定类型,那么应该使用Recordset的Open方法,此时Command对象作为Recordset的数据源。例如:
cmdAuthors.ActiveConnection = strConn
cmdAuthors.CommandText = "Authors"
cmdAuthors.CommandType = adCmdTable
rsAuthors.Open cmdAuthors, , adOpenDynamic, adLockOptimistic
注意,在Open命令行中忽略了连接细节,因为连接设置在Command对象中。连接细节在命令打开前已经设置在Command对象的ActiveConnection属性中。
9.2.2 操作命令
对于操作命令,比如那些无记录返回的更新命令,整个过程相似,只需移去设置记录集的代码:
Set cmdUpdate = Server.CreateObject("ADODB.Command")
strSQL = "UPDATE Titles SET Price = Price * 1.10" & "WHERE Type='Business'"
cmdUpdate.ActiveConnection = strConn
cmdUpdate.CommandText = sSQL
cmdUpdate.CommandType = adCmdText
cmdUpdate.Execute , , adExecuteNoRecords
注意,我们在此设置了命令类型,然后在Execute行中增加了额外的设置选项。这段代码运行UPDATE命令,并且保证不会创建新的记录集。