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)