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

ASP通用表單自動生成SQL語句函數庫:Insert/Update雙模式

     編輯:關於SqlServer

經典ASP開發中,手寫SQL拼接易出錯且難維護。本文提供兩個通用函數 insertStr / updateStr,依據 Request.Form 自動生成標準SQL,約定:表單字段名 = 數據庫列名,按鈕用 <button> + JS form.submit() 提交。

核心約定

  • objForm 必須為 Request.Form。
  • numStr:無需單引號的字段名列表,逗號分隔 (如 "id,age,price"),無則傳 ""。
  • whereField / whereJoin:更新條件字段與邏輯 (AND/OR)。

函數 1:insertStr - 自動生成 INSERT

Function insertStr(objForm, tbName, numStr)
    Dim tbField(), tbFieldVal(), i, numPos
    i = 0
    For Each objItem In objForm
        ReDim Preserve tbField(i)
        tbField(i) = objItem
        ReDim Preserve tbFieldVal(i)
        numPos = InStr(numStr, objItem)
        If numPos <> 0 Then
            tbFieldVal(i) = Trim(objForm(objItem))           ' 數值型無引號
        Else
            tbFieldVal(i) = "'" & Trim(objForm(objItem)) & "'"  ' 字符型加引號
        End If
        i = i + 1
    Next
    insertStr = "INSERT INTO " & tbName & "(" & Join(tbField, ",") & ") VALUES(" & Join(tbFieldVal, ",") & ")"
End Function

函數 2:updateStr - 自動生成 UPDATE (條件來自表單)

Function updateStr(objForm, tbName, whereField, whereJoin, numStr)
    Dim setFieldVal(), whereStrArr(), i, t, wherePos, numPos, wherePos2
    i = 0 : t = 0
    For Each objItem In objForm
        wherePos = InStr(whereField, objItem)
        If wherePos = 0 Then                            ' 非條件字段 → SET子句
            ReDim Preserve setFieldVal(i)
            numPos = InStr(numStr, objItem)
            If numPos <> 0 Then
                setFieldVal(i) = objItem & "=" & Trim(objForm(objItem))
            Else
                setFieldVal(i) = objItem & "='" & Trim(objForm(objItem)) & "'"
            End If
            i = i + 1
        Else                                            ' 條件字段 → WHERE子句
            ReDim Preserve whereStrArr(t)
            numPos = InStr(numStr, objItem)
            If numPos <> 0 Then
                whereStrArr(t) = objItem & "=" & Trim(objForm(objItem))
            Else
                whereStrArr(t) = objItem & "='" & Trim(objForm(objItem)) & "'"
            End If
            t = t + 1
        End If
    Next
    ' 組裝WHERE
    wherePos2 = InStr(whereField, ",")
    If wherePos2 <> 0 Then
        whereStr = " WHERE " & Join(whereStrArr, " " & whereJoin & " ")
    Else
        whereStr = " WHERE " & whereStrArr(0)
    End If
    updateStr = "UPDATE " & tbName & " SET " & Join(setFieldVal, ",") & whereStr
End Function

函數 3:updateStr2 - 條件來自變量 (Session等)

Function updateStr2(objForm, tbName, conditions, numStr)
    Dim setFieldVal(), i, numPos
    i = 0
    For Each objItem In objForm
        ReDim Preserve setFieldVal(i)
        numPos = InStr(numStr, objItem)
        If numPos <> 0 Then
            setFieldVal(i) = objItem & "=" & Trim(Replace(objForm(objItem), "'", ""))
        Else
            setFieldVal(i) = objItem & "='" & Trim(Replace(objForm(objItem), "'", "")) & "'"
        End If
        i = i + 1
    Next
    updateStr2 = "UPDATE " & tbName & " SET " & Join(setFieldVal, ",") & " WHERE " & conditions
End Function

使用示例

' 表單: username, password, email, age (age為數值)
' 插入
sql = insertStr(Request.Form, "Users", "age")
' 結果: INSERT INTO Users(username,password,email,age) VALUES('tom','123','tom@x.com',25)

' 更新 (條件字段: username, 邏輯: AND)
sql = updateStr(Request.Form, "Users", "username", "AND", "age")
' 結果: UPDATE Users SET password='123',email='tom@x.com',age=25 WHERE username='tom'

安全警示 (必讀)

  • 零防注入:函數未做任何輸入清洗,直接拼接用戶輸入 → 極高SQL注入風險。
  • 生產環境禁用:除非配合嚴格白名單驗證 (如字段名白名單、數值型強制 CLng、字符型 Replace(str, "'", "''"))。
  • 現代替代方案:參數化查詢 (ADODB.Command)、ORM、存儲過程。

本代碼僅供教學/維護舊系統參考,新項目嚴禁使用拼接式SQL生成。

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