论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Asp教程
Tag:入门,文摘,实例,技巧,iis,表单,对象,上传,数据库,记录集,session,cookies,存储过程,注入,分页,安全,优化,xmlhttp,fso,jmail,application,防盗链,stream,组件,md5,乱码,缓存,加密,验证码,算法,ubb,正则表达式,水印,,日志,压缩,url重写,控件,函数,破解,触发器,socket,ADO,初学,聊天室,留言本,视频教程

存储过程及ASP调用存储过程实现分页(三)

文章类别:Asp | 发表日期:2010-2-1 13:36:52

存储过程及ASP调用存储过程实现分页(三)

2、有返回值、输入参数和输出参数的储存过程。

我们再去留意下存储过程的语法中有怎么一个参数:[OUTPUT],它表明参数是返回参数。该选项的值可以返回给 EXEC[UTE]。使用 OUTPUT 参数可将信息返回给调用过程。在实际应用中,通常我们是同时有返回值、输入参数和输出参数的存储过程。比如我们想取得班级表里某位同学的家庭地址,这时我们就应该输入该同学的“学号”(输入参数)及要显示的“家庭地址”(输出参数)和要验证该学号是否存在(返回值)。

下面就拿我们创建的用户表testUser来做例子。其功能是输入一个用户名查询他的电子邮件,同时验证输入的用户是否存在(比如存在返回1,否则返回0之类)并返回相应的值。

①存储过程testPROC2代码:

/*==============

第2个存储过程:即有返回值,输入参数和输出参数。

●RETURN 语句无条件终止查询、存储过程或批处理。存储过程或批处理中 RETURN 语句后面的语句都不执行。

●return:除非特别指明,所有系统存储过程返回 0 值表示成功,返回非零值则表示失败。

●本存储过程的return都是特别的说明,所以其返回值都是有相应的意义。

●下面的返回值0、1、2假如去掉的话,即如果 RETURN 未指定值,则存储过程返回 0。在程序调用且正常运行的情况下获取“返回值”的值都是返回 0 。

==============*/

Use Johnny

Go

CREATE PROC testPROC2

       @userName varchar(20),             --声明变量@userName

       @userEmail varchar(50) OUTPUT       --声明变量@userEmail,且是输出参数。

AS

set nocount on

begin

       IF @userName is null OR @userName='' --当输入参数为空或is null时

       begin

              set @userEmail='请输入要查询的用户名!'      --符合条件给输出参数赋值,以便提示

              return 0   --输入参数为空时,“返回值”我们这里设置为 0(当然可以设置其他的数字)。

       end

       ELSE

              IF exists(SELECT uEmail FROM testUser WHERE uName=@userName) --如果输入参数存在时

              begin

                     SELECT @userEmail=uEmail FROM testUser WHERE uName=@userName    --输出参数赋值

                     return 1   --验证输入的参数(用户名),存在时“返回值”我们这里设置为 1。

              end

              ELSE

              begin

                     set @userEmail='不存在此用户名!'          ----如果输入参数 不 存在时,提示

                     return 2   --输入的参数(用户名)不 存在时“返回值”我们这里设置为 2。

              end

end

执行下。

②ASP代码:现在我们在ASP中对testPROC2这个的存储过程进行调用代码(绿色部分):

dim cmd,userName,userEmail

userName=Trim(request.Form("uName"))   '输入参数

set cmd = Server.CreateObject("ADODB.Command")

cmd.ActiveConnection = connstr

cmd.CommandText = "dbo.testPROC2"

cmd.CommandType = 4

cmd.CommandTimeout = 0

cmd.Prepared = true

cmd.Parameters.Append cmd.CreateParameter("@RETURN_VALUE", 3, 4)

cmd.Parameters.Append cmd.CreateParameter("@userName", 200, 1,20,userName)

cmd.Parameters.Append cmd.CreateParameter("@userEmail", 200, 2,50)

cmd.Execute()      

'返回值

flag=cmd(0)  

'输出参数    类

userEmail=cmd(2) '或userEmail=cmd("@userEmail")或userEmail=cmd.Parameters(1) 其读取顺序时从0开始。

set cmd=nothing

response.Write("<form id=""form1"" name=""form1"" method=""post"" action=""test2.asp"">")

response.Write("<input name=""uName"" type=""text"" id=""uName"" />")

response.Write("<input type=""submit"" name=""Submit"" value=""查询"" /></form>")

if request.Form("Submit")<>"" then

response.Write("你的“输入参数”是:【"&userName&"】<br />查询结果:<br />“输出参数”是:【"&userEmail&"】<br />“返回值”是:【"&flag&"】")response.End()

end if

运行结果:

说明:

上面图中的3种结果正好与我们的存储过程里预设的功能相同,当然第3种情况我们一般会在客户端设置让它一定要输入信息,而不是没有任何输入(或空格)的情况就点查询按钮。

这个也常用在验证登陆系统中,比如登陆的帐号无效(不存在时)其返回值为0,有(存在)其返回值为1等等。好了,现在开始讲解上面的代码的意思了。

在ASP中要取得返回值,需要利用Parameters集合来声明参数(具体的请参考ADO):

cmd.Parameters.Append cmd.CreateParameter("@RETURN_VALUE", 3, 4)

cmd.Parameters.Append cmd.CreateParameter("@userName", 200, 1,20,userName)

cmd.Parameters.Append cmd.CreateParameter("@userEmail", 200, 2,50)

代码中有这3行(返回值,必须最先出现)。括号里的参数什么意思呢?含义如下:

cmd.Parameters.Append cmd.CreateParameter("@RETURN_VALUE", 3, 4)

第一个参数@RETURN_VALUE为参数名,这个名字可以任意取(如取:JOHNNY),但一般取跟存储过程中的参数一样容易理解,而且参数多时对应起来容易。从字意上看它就是返回值。

第二个参数3表示:参数的数据类型。既然是数据类型那肯定有好几种了,是的,这里列了个对应表:

adBigInt: 20 ;

adBinary : 128 ;

adBoolean: 11 ;

adChar: 129 ;

adDBTimeStamp: 135 ;

adEmpty: 0 ;

adInteger: 3 ;

adSmallInt: 2 ;

adTinyInt: 16 ;

adVarChar: 200 ;

根据这个表我们就知道这个3是什么意思了。它就是整型数据类型。对于返回值,它只能取且-1到-99为保留值。

第三个参数4表示参数的类型。它的取值范围是0 ~ 4分别是:

0 : 类型无法确定;1: 输入参数;2: 输入参数;3:输入或输出参数;4: 返回值

所以我们可以看出这里的4表示它是返回值。

现在说

cmd.Parameters.Append cmd.CreateParameter("@userName", 200, 1,20,userName)

cmd.Parameters.Append cmd.CreateParameter("@userEmail", 200, 2,50)

这个,我们看到这2行正是我们testPROC2存储过程中对应的参数,可以知道输入参数@userName是需要5个参数的。

分别是:参数名称、参数数据类型、参数的类型、数据长度、参数值

而输出参数@userEmail只要4个参数,少了最后的参数值。这样就明白了这些参数的含义了吧,呵呵~~,不明白?!不会吧,我那尽量说得通俗易懂些:)

注意:这里参数的顺序一定要跟创建存储过程中声明参数顺序一致,同时如果存储过程同时具有返回值以及输入、输出参数,则返回值要最先声明。

下面是错误的:

cmd.Parameters.Append cmd.CreateParameter("@userEmail", 200, 2,50)

cmd.Parameters.Append cmd.CreateParameter("@userName", 200, 1,20,userName)

cmd.Parameters.Append cmd.CreateParameter("@RETURN_VALUE", 3, 4)

下面我们来说下有返回输出参数和记录集的存储过程

视频教程列表
文章教程搜索
 
Asp推荐教程
Asp热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058