經典ASP開發中,手寫SQL拼接易出錯且難維護。本文提供兩個通用函數 insertStr / updateStr,依據 Request.Form 自動生成標準SQL,約定:表單字段名 = 數據庫列名,按鈕用 <button> + JS form.submit() 提交。
objForm 必須為 Request.Form。numStr:無需單引號的字段名列表,逗號分隔 (如 "id,age,price"),無則傳 ""。whereField / whereJoin:更新條件字段與邏輯 (AND/OR)。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
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
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'
CLng、字符型 Replace(str, "'", "''"))。ADODB.Command)、ORM、存儲過程。本代碼僅供教學/維護舊系統參考,新項目嚴禁使用拼接式SQL生成。