首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

善用預存程序回傳值在 ASP 中實現自訂錯誤彈窗

     編輯:關於SqlServer

場景痛點

Web 表單提交後需在資料庫層面驗證業務規則(如產品名稱唯一性),傳統做法在 ASP 頁面間跳轉傳遞錯誤訊息,程式碼繁瑣且使用者體驗差。

解決思路

  1. 預存程序執行業務檢查,發現違規時回傳自訂錯誤碼(如 55555),成功回傳 0。
  2. ASP 使用 ADODB.Command 呼叫預存程序,讀取 Parameters(0) 回傳值。
  3. 根據回傳值動態產生 JavaScript 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

ASP 呼叫與錯誤處理

<%
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 增加分支。

此模式適用於所有「動作查詢」頁面,構建統一的錯誤處理框架。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved