Web 表單提交後需在資料庫層面驗證業務規則(如產品名稱唯一性),傳統做法在 ASP 頁面間跳轉傳遞錯誤訊息,程式碼繁瑣且使用者體驗差。
55555),成功回傳 0。ADODB.Command 呼叫預存程序,讀取 Parameters(0) 回傳值。alert() 並 history.back(),保留表單輸入內容。CREATE PROCEDURE Proc_InsertProduct
@productname VARCHAR(50) = NULL,
@price MONEY = NULL
AS
BEGIN
IF EXISTS (SELECT 1 FROM tblProducts WHERE productname = @productname)
RETURN 55555 -- 自訂錯誤碼:產品已存在
ELSE
INSERT INTO tblProducts (productname, price) VALUES (@productname, @price)
RETURN @@ERROR -- 0 表示成功
END
<%
Dim conn, cmd, retVal
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "YourConnectionString"
Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = conn
cmd.CommandType = 4 ' adCmdStoredProc
cmd.CommandText = "Proc_InsertProduct"
cmd.Parameters.Append cmd.CreateParameter("@productname", 200, 1, 50, Request.Form("productname"))
cmd.Parameters.Append cmd.CreateParameter("@price", 6, 1, , Request.Form("price"))
' 回傳值參數必須最先追加或為 Parameters(0)
cmd.Parameters.Append cmd.CreateParameter("RETURN_VALUE", 3, 4) ' adInteger, adParamReturnValue
cmd.Execute
retVal = cmd.Parameters(0).Value
If retVal <> 0 Then
Response.Write GetErrorScript(retVal)
Else
Response.Redirect "Success.asp"
End If
Set cmd = Nothing: conn.Close: Set conn = Nothing
%>
<%
Function GetErrorScript(code)
Dim title, msg
Select Case code
Case 55555
title = "新增產品失敗"
msg = "產品名稱已存在,請檢查輸入。"
Case Else
title = "系統錯誤"
msg = "新增產品時發生未知錯誤,請重試。"
End Select
GetErrorScript = "<script>alert('" & title & ": " & msg & "'); history.back();</script>"
End Function
%>
history.back() 自動保留使用者輸入,免去重新填寫。Select Case 增加分支。此模式適用於所有「動作查詢」頁面,構建統一的錯誤處理框架。