278Asp;高编程 Chinapub.com 下载 参数 adParamInput,参数是传给存储过程的输入参数 adParamOutput,参数是从存储过程检索出的输出参数 dParamInputOutput,参数可同时作为输入和输出参数 ad Param Retum value,该参数包含存储过程返回的状态 参数长度。对于固定长度的类型,比如整型,该值可以忽略 旦创建了参数就可以将其追加到 Parameters集合中,例如: Set parvalue cmdUpdate CreateParameter('@Type", adVarwchar, adParamInput 12, Business·) cmdUpdate Parameters Append parvalue Set parvalue cmdUpdate CreateParameter('@Percent, adur maUpdate Parameters Append parvalue 没有必要显式地创建一个对象去保存参数,缺省的 Variant类型已经可以工作得相当好。 如果不想创建一个变量,也可以走捷径,例如下面的代码 mdUpdate. Parameters Append cmdUpdate. CreateParameter("pErcent, adCurrency, adParamInput,, 10) 这使用 Create Parameter方法返回一个 Parameter对象,并用 Append方法接收它。这种方法 比使用变量运行得快,却加长了代码行,可读性比较差。可以根据自己的爱好选择其中一种 方法。 参数加到 Parameters集合后,就保留在其中,因此,不一定在创建参数时就为每个参数赋 值。可以在命令运行前的任何时候设置参数的值。例如 cmdUpdate Parameters Append cmaUpdate. CreateParameter ("@percent", adcurrency, adParamInput) cmdUpdate. Parameters(@Percent)= 10 前一章提到了访问集合中的值有好几种方法, Parameters集合并没有什么不同。上面的例 子使用参数的名字在集合中检索参数,也可以使用索引号进行检索: 以上代码对参数集合中第一个( Parameters集合从0开始编号)参数进行了赋值。使用索引号 比使用名字索引速度快,但很显然使用名字使代码更易读, 重点注意 Parameters集合中参数的顺序必须与存储过程中参数的顺序相一致。 运行带参数的命令 旦加入参数,就可立即运行命令,同时这些参数的值传入存储过程。现在可用一个友 好的网页去更新用户选择的类型的书价。例如,假设有一个名为 Update Prices. asp的网页,其 运行时的界面如图92所示 通过从数据库中获取书类型的列表,可以很轻松地动态创建该页面。首先要做的是包含 文件 Connection.asp,该文件包含了连接字符串(保存在变量 str Conn中)以及对ADO常数的引用
(续) 参 数 说 明 a d P a r a m I n p u t,参数是传给存储过程的输入参数 a d P a r a m O u t p u t,参数是从存储过程检索出的输出参数 a d P a r a m I n p u t O u t p u t,参数可同时作为输入和输出参数 a d P a r a m R e t u r n Va l u e,该参数包含存储过程返回的状态 S i z e 参数长度。对于固定长度的类型,比如整型,该值可以忽略 Va l u e 参数的值 一旦创建了参数就可以将其追加到 P a r a m e t e r s集合中,例如: 没有必要显式地创建一个对象去保存参数,缺省的 Va r i a n t类型已经可以工作得相当好。 如果不想创建一个变量,也可以走捷径,例如下面的代码: 这使用C r e a t e P a r a m e t e r方法返回一个P a r a m e t e r对象,并用A p p e n d方法接收它。这种方法 比使用变量运行得快,却加长了代码行,可读性比较差。可以根据自己的爱好选择其中一种 方法。 参数加到P a r a m e t e r s集合后,就保留在其中,因此,不一定在创建参数时就为每个参数赋 值。可以在命令运行前的任何时候设置参数的值。例如: 前一章提到了访问集合中的值有好几种方法, P a r a m e t e r s集合并没有什么不同。上面的例 子使用参数的名字在集合中检索参数,也可以使用索引号进行检索: 以上代码对参数集合中第一个 ( P a r a m e t e r s集合从0开始编号)参数进行了赋值。使用索引号 比使用名字索引速度快,但很显然使用名字使代码更易读。 重点注意P a r a m e t e r s集合中参数的顺序必须与存储过程中参数的顺序相一致。 运行带参数的命令 一旦加入参数,就可立即运行命令,同时这些参数的值传入存储过程。现在可用一个友 好的网页去更新用户选择的类型的书价。例如,假设有一个名为 U p d a t e P r i c e s . a s p的网页,其 运行时的界面如图9 - 2所示 通过从数据库中获取书类型的列表,可以很轻松地动态创建该页面。首先要做的是包含 文件C o n n e c t i o n . a s p,该文件包含了连接字符串(保存在变量s t r C o n n中)以及对A D O常数的引用, 278计计ASP 3 高级编程 下载
aopub.com 第9章连接、命令和过程 279 这在前面的章节已经讨论过。 <!--#INCLUDE FILE-"./Include/Connection. asp.--> Command object Calling a stored procedure with parameters ns page shows how to run a stored procedure with parameters. It uses the atabase and updates the prices of books by a percentage vale, for books or for a particular book type, You should enter the percentage value without the 9 sign(so for a 10% ncrease, ust enter 10). For a decrease enter a negative number. Book Type:「 business Percent Value 10 91999 wrox Press- Professiona ASP 3.Q(ISBN: 1-861002-61-0) 图9-2 Update Prices.asp网页运行时的界面 接下来,可以创建一个窗体(在这儿不显示大量文本,仅仅用一个样本文件)。该窗体调用 个名为 StoredProcedure. asp的文件 FORM NAME=UpdatePrices.Method=Post ACTION="StoredProcedure. asp'> <TR> TD>Book Type: </TD> <SELECT NAMEm'lstTypes></TD> 现在开始编写ASP脚本从 titles表中读取书的类型。使用一个SQL字符串只返回唯一的书类 型,然后将返回值放到HTML的 OPTION标记中: im retype im strsQL im strquote Predefine the quote character strQuote Chr (34) Create a recordset strsoL ='SELECT DISTINCT type FRoM titles rsTypes. Open strsQL, strconn Create the book types Response. write <OPTION VALUE="& strquote
这在前面的章节已经讨论过。 图9-2 UpdatePrices.asp网页运行时的界面 接下来,可以创建一个窗体 (在这儿不显示大量文本,仅仅用一个样本文件 )。该窗体调用 一个名为S t o r e d P r o c e d u r e . a s p的文件。 现在开始编写A S P脚本从t i t l e s表中读取书的类型。使用一个 S Q L字符串只返回唯一的书类 型,然后将返回值放到H T M L的O P T I O N标记中: 第 9章 连接、命令和过程计计279 下载
280Asp高箱程 Chinapub.com 下载 rsTypes( Type)& strquote &*>"&rsTypes(*Type) rsTypes MoveNext se Set rsTypes Nothing 显示书的类型后,接着可以构建窗体的其他部分,包括一个允许用户输入书价变化百分 数的文本框 </SELECT> </TD> <TD>Percent value</TD> <TD><INPUT NAME="txtPercent TYPE="TEXT"></TD> </TR> /TABLE> INPUT TYPE="Submit" VALUE='Run Query> / FORM> 现在看一下 Run Query按钮调用的ASP文件 StoredProcedure. asp。首先,声明变量并从调 用窗体取出书的类型和百分数 Dim Dim Dim Dim ent Get the form values strType w Request Form('lstTypes") curPercent Request Form('txtPercent') 现在可以向用户显示一些确认信息,告诉他们将发生什么 Tell the user what's being done Response. Write "Updating all books*& f type <B>.& strType &</B>.& by·& curPercent&·8<P> 现在重新回到代码内部,在此创建 对象和参数。 with cmdupdate ActiveConnection a strconn CommandText =.usp_UpdatePric 利用从前面网页的窗体中提取的数据值,使用快捷方法创建和增加参数。 Add the parameters Parameters Append CreateParameter('@Type, advarwchar, adParamInput Parameters Append CreateParameter('@Percent, adcurrency, adParamInput,, curpercent) 现在,运行存储过程 Execute the command Execute lngRecs, adExecuteNoRecords
显示书的类型后,接着可以构建窗体的其他部分,包括一个允许用户输入书价变化百分 数的文本框。 现在看一下Run Query按钮调用的A S P文件S t o r e d P r o c e d u r e . a s p。首先,声明变量并从调 用窗体取出书的类型和百分数。 现在可以向用户显示一些确认信息,告诉他们将发生什么。 现在重新回到代码内部,在此创建 C o m m a n d对象和参数。 利用从前面网页的窗体中提取的数据值,使用快捷方法创建和增加参数。 现在,运行存储过程。 280计计ASP 3 高级编程 下载
inapub.com 第连接,命和过程281 End with 为了确认,可以告诉用户已经更新多少条记录。 And finally tell the dure complet happened Response. Write ' Proce lngRecs &.records were updated Set cmaupdate Nothing 这样就有了两个简单页面。前者创建了一个供选择的项目列表,后者使用其中某个项目 值更新数据。这是许多需要显示和更新数据的ASP页面的基础。 传递数组参数 Parameters参数集合一般来说比较好用,但有时稍有麻烦(尤其对于新手)。好在有一种快 捷方法,使用 Execute方法的 Parameters参数。例如,调用存储过程usp_ Update Prices,但不使 Parameters集合。 创建一个 Command对象,并同前面一样设置其属性 Set cmdUpdate Server Createobject('ADODB. Command. Set the pr。pert f the command with cmaupdat ActiveConnection strconn CommandText ="usp_UpdatePrices CommandType adcmdstoredproc 但这里正是差异所在。我们仅是通过 Execute方法传递参数给存储过程,而不是创建参数 并添加到集合中 Execute the command Execute lngRecs, Array(strType, curPercent), adExecuteNoRecords End with 里使用了Aray函数,将单个变量转换为数组,以适于方法调用。这种方法当然也有缺 只能使用输入参数。因为不能指定参数的类型和传递方向,而缺省为输入参数。 ·如果要多次调用存储过程,这种方法速度就比较慢,因为ADO将向数据存储询问参数的 内容及数据类型 集合方法和数组方法之间在速度上的差异非常之小,几乎可以忽略。所以,如果只有输 入参数,可随便使用哪一种。实际上,人们更喜欢使用 Parameters集合的方法,尽管它稍为繁 琐,但是使参数的属性更加明确。 4.输出参数 我们已经知道如何获得受命令影响的记录数,如果需要更多信息,却又不想返回一个记 集,怎么办?也许想从存储过程中返回两个或三个值,但又不想费心创建一个记录集。在 这时,可以定义一个输出参数,其值由存储过程提供。 例如,对于更新书价的程序,如果想在更新之后找出最高价格,可将存储过程改成: Money OuTPUT
为了确认,可以告诉用户已经更新多少条记录。 这样就有了两个简单页面。前者创建了一个供选择的项目列表,后者使用其中某个项目 值更新数据。这是许多需要显示和更新数据的 A S P页面的基础。 3. 传递数组参数 P a r a m e t e r s参数集合一般来说比较好用,但有时稍有麻烦 (尤其对于新手)。好在有一种快 捷方法,使用E x e c u t e方法的P a r a m e t e r s参数。例如,调用存储过程 u s p _ U p d a t e P r i c e s,但不使 用P a r a m e t e r s集合。 创建一个C o m m a n d对象,并同前面一样设置其属性。 但这里正是差异所在。我们仅是通过 E x e c u t e方法传递参数给存储过程,而不是创建参数 并添加到集合中。 这里使用了A r r a y函数,将单个变量转换为数组,以适于方法调用。这种方法当然也有缺 点: • 只能使用输入参数。因为不能指定参数的类型和传递方向,而缺省为输入参数。 • 如果要多次调用存储过程,这种方法速度就比较慢,因为 A D O将向数据存储询问参数的 内容及数据类型。 集合方法和数组方法之间在速度上的差异非常之小,几乎可以忽略。所以,如果只有输 入参数,可随便使用哪一种。实际上,人们更喜欢使用 P a r a m e t e r s集合的方法,尽管它稍为繁 琐,但是使参数的属性更加明确。 4. 输出参数 我们已经知道如何获得受命令影响的记录数,如果需要更多信息,却又不想返回一个记 录集,怎么办?也许想从存储过程中返回两个或三个值,但又不想费心创建一个记录集。在 这时,可以定义一个输出参数,其值由存储过程提供。 例如,对于更新书价的程序,如果想在更新之后找出最高价格,可将存储过程改成: 第 9章 连接、命令和过程计计281 下载