与Connection对象类似,Command对象也用来执行SQL语句和返回一个Recordset,如程序清单6.10。然而,使用Command对象的最大优点在于它能传送参数出入存储过程。不仅返回一个return值,SQL
Server的存储过程还可以有input、output和inputoutput参数。使用ADO的Command对象,就可使用SQL Server存储对象的所有类型参数。 (10) 程序清单6.11: 执行带参数的存储过程 set objConn = Server.CreateObject ( " ADODB.Connection " ) set objCmd = Server.CreateObject ( " ADODB.Command" ) set objRS = Server.CreateObject ( "ADODB.Recordset " ) objConn.Open Application("ConnString") set objCmd.ActiveConnection = objConn '---指定Command对象将执行的存储过程名 objCmd.CommandText = "ByRoyalty" objCmd.CommandType = adCmdStoredProc '---指定存储过程参数的值 objCmd.Parameters.Append objCmd.CreateParameter("percentage", adInteger, adParamInput,,50) set objRS = objCmd.Execute 注解:其它注释见前面程序清单6.12 让我们将程序清单中的代码拆开以便检查各部分工作。首先,代码创建三个所需对象: Connection对象与数据库通讯,Command对象执行存储过程,Recordset对象获取返回的记录集。然后打开Connection对象,并通过设置Command对象的ActiveConnection 属性将其与Command对象关联。 在准备代码完成之后,设置CommandText属性以指定Command对象将执行的存储过程名。因为Command对象可以执行SQL语句、打开表和执行存储过程,所以需要告诉它做什么。为此在本例中,设置CommandType属性为adCmdStoredProc 。 现在指定存储过程参数的值。但在此之前,需要考虑到Command对象的Parameters集仍为空。有两条途径填充Parameters集:使用Refresh方法使代码变小。但是,Refresh方法将负担交给数据提供者以检查参数个数、名称、数据类型、大小和方向(即Input、Output、InputOutput或Return)。让数据提供者做这些的问题在于需要大量资源。 使用Refresh方法的替代方法是一个一个地创建参数并手工地将其加入Parameters集。这条途径必须指定参数名、数据类型、大小、方向和值(如果它是Input或InputOutput参数)。这看来可能有许多工作,但它提高了程序性能。Command.CreateParameter方法的语法: Set objParm = ObjCmd.CreateParameter(param_name,datatype, direction, size, value) 其中: ・ param_name是SQL Server所知的参数名; ・ datatype是参数要求的数据类型; ・ Direction是四个值之一:adParamInput、adParamOutput、adParamInputOutput或adParamReturnalue; ・ size指明基于字符的数据类型长度; ・ value是为Input或InputOutput参数传入的值。 在参数创建并存入objParm 变量之后,就可使用Append方法加入到Parameters集。不要忘了在设置好Command对象的属性和参数之后,即可从Command对象的Execute方法获得一个Recordset对象。 |