时间:2016-02-24 12:35 来源: 我爱IT技术网 作者:佚名
欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【ASP 3.0高级编程(四十二)】,下面是详细的分享!
ASP 3.0高级编程(四十二)
5. 返回值对函数返回值的处理不同于存储过程返回值的处理,这常常导致混淆。在函数中,经常是返回一个布尔值来表明函数运行的成功与否。
If SomeFunctionName()=True Then
' Function succeeded
但在调用一个存储过程时,却不能使用同样的方法,因为存储是用Execute方法运行的,同时返回一个记录集。
Set rsAuthors=cmdAuthors.Execute
如果得不到一个返回值,如何确定是否已正确执行存储过程?当发生错误时,会报告错误,这样就可使用前一章提供的错误处理代码来处理错误。但对于一些非致命的逻辑错误怎么办?
例如,考虑向employee表添加一个新职员的情形。你可能不想防止两个职员同名的情况,但想注明这个情况。那么,可以使用一个返回值以表明是否已有同名的职员存在。存储过程如下:
CREATE PROCEDURE usp_AddEmployee
@Emp_ID Char(9),
@FName Varchar(20),
@Minit Char(1),
@LName Varchar(30),
@Job_ID SmallInt,
@Job_Lvl TinyInt,
@Pub_ID Char(4),
@Hire_Date Datetime
AS
BEGIN
DECLARE @Exists Int -- Return value
-- See if an employee with the same name exists
IF EXISTS(SELECT *
FROM Employee
WHERE FName=@FName
AND MInit=@MInit
AND LName=@LName)
SELECT @Exists=1
ELSE
SELECT @Exists=0
INSERT INTO Employee (emp_id, fname, minit, lname,
job_id, job_lvl, pub_id, hire_date)
VALUES (@Emp_Id, @FName, @MInit, @LName, @Job_ID,
@Job_Lvl, @Pub_ID, @Hire_Date)
RETURN @Exists
END
该过程首先检查是否有同名的职员存在,并据此设定相应的变量Exists,若存在同名,就设为1,否则为0。然后将该职员加到表中,同时把Exists的值作为返回值返回。
注意尽管返回了一个值,但并未将其声明为存储过程的参数。
调用该过程的ASP代码如下:
<!-- #INCLUDE FILE="../include/Connection.asp" -->
<%
Dim cmdEmployee
Dim lngRecs
Dim lngAdded
Set cmdEmployee=Server.CreateObject("ADODB.Command")
' Set the properties of the command
With cmdEmployee
.ActiveConnection=strConn
.CommandText="usp_AddEmployee"
.CommandType=adCmdStoredProc
' Create the parameters
' Notice that the return value is the first parameter
.Parameters.Append .CreateParameter ("RETURN_VALUE", adInteger, _
adParamReturnValue)
.Parameters.Append .CreateParameter ("@Emp_id", adChar, adParamInput, 9)
.Parameters.Append .CreateParameter ("@fname", adVarWChar, adParamInput, 20)
.Parameters.Append .CreateParameter ("@minit", adChar, adParamInput, 1)
.Parameters.Append .CreateParameter ("@lname", adVarWChar, adParamInput, 30)
.Parameters.Append .CreateParameter ("@job_id", adSmallInt, adParamInput)
.Parameters.Append .CreateParameter ("@job_lvl", adUnsignedTinyInt, adParamInput)
.Parameters.Append .CreateParameter ("@pub_id", adChar, adParamInput, 4)
.Parameters.Append .CreateParameter ("@hire_date", adDBTimeStamp, _
adParamInput, 8)
' Set the parameter values
.Parameters("@Emp_id")=Request.Form("txtEmpID")
.Parameters("@fname")=Request.Form("txtFirstName")
.Parameters("@minit")=Request.Form("txtInitial")
.Parameters("@lname")=Request.Form("txtLastName")
.Parameters("@job_id")=Request.Form("lstJobs")
.Parameters("@job_lvl")=Request.Form("txtJobLevel")
.Parameters("@pub_id")=Request.Form("lstPublisher")
.Parameters("@hire_date")=Request.Form("txtHireDate")
' Run the stored procedure
.Execute lngRecs, , adExecuteNoRecords
' Extract the return value
lngAdded=.Parameters("RETURN_VALUE")
End With
Response.Write "New employee added.<P>"
If lngAdded=1 Then
Response.Write "An employee with the same name already exists."
End If
Set cmdEmployee=Nothing
%>
需要重点注意,返回值应当作为集合中第一个参数被创建。即使返回值并不作为一个参数出现在存储过程中,总是Parameters集合中的第一个Parameters。
以上所分享的是关于ASP 3.0高级编程(四十二),下面是编辑为你推荐的有价值的用户互动:
相关问题:asp.net mvc3.0 高级编程 完成版的pdf
答:原版PDF >>详细
相关问题:求 ASP.NET 4高级编程 涵盖C#和VB.NET 第7版 中文...
答:高代价从别的地方盘过来的,你有福气了!! 这是一份绝对全本,不缺页,中文版,正是你所需要的资料。 文件好大啊,我上... >>详细
相关问题:ASP.NET4高级编程(第七版)和ASP.NET4揭秘系列 丛...
答:这个,楼上的两位朋友,太给力了。。。 说实话,个人觉得如果你要当工具书,这几本书都是可以的,主要是在你对某些技术初窥门径的时候,可以给你一些指导。 但是这几本书,基本上都是偏重于原理和基础,各个方面点一点。你看了,可能跟人家吹牛... >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
