使用表單集合建立SQL語句3

來源:互聯網
上載者:User
集合|語句 其它考慮

靠近函數的頂部,您會注意到我們使用了replace函數,把資料中的每個單引號替換成兩個單引號。這是因為SQL翻譯器使用單引號做為字串的分隔字元,如果資料中有單引號,就會造成SQL解釋錯誤。把一個單引號轉換成兩個單引號,可以確保SQL翻譯器在文本中正確加入單引號。

到了現在,就只剩下兩個問題要解決:空值Null及從最終SQL語句中省略欄位。列表 D 中加入了這兩個問題的代碼。

列表 D: buildSQLInsert函數的最終版。


<%
function buildSQLInsert( targetTable, omitFields)
iStr = "insert into " & targetTable & " "
vStr = "values ("
nStr = "("
' 在表單集合中迴圈,並建立起SQL語句的組成部分
for each x in request.form
fieldName = uCase(x)
' 判斷欄位是否被省略?
if inStr(uCase(omitFields),x) = 0 then
fieldData = replace(request.form(fieldName), _
"'", "''")
' 如果沒有資料,就插入 NULL
if trim(fieldData) = "" then
fieldData = "NULL"
vStr = vStr & fieldData & ", "
nStr = nStr & fieldName & ", "
else
typeDelimPos = inStr(fieldName, "_")
if typeDelimPos = 0 then
' 是文字欄位
' 建立欄位名列表
nStr = nStr & fieldName & ", "
vStr = vStr & "'" & fieldData & "', "
else
' 欄位是其它類型
fieldType = left(fieldName, typeDelimPos - 1)
fieldName = mid(fieldName, typeDelimPos + 1)
' 把欄位名加入名稱列表
nStr = nStr & fieldName & ", "
' 把欄位類型變成大寫以確保匹配
select case uCase(fieldType)
case "NUM"
vStr = vStr & fieldData & ", "
'把不明類型按文本型處理
case else
vStr = vStr & "'" & fieldData & "', "
end select
end if
end if
end if
next

' 把結尾的", " 從我們建立的字串中去掉
vStr = left(vStr, len(vStr) - 2) & ")"
nStr = left(nStr, len(nStr) - 2) & ") "

' 把SQL語句整合起來
buildSQLInsert = iStr & nStr & vStr
end function


if trim(request("fName")&request("lname")&request("age")) <> "" then
response.write( buildSQLInsert("") & "<BR<")
response.write( buildSQLInsert("NUM_AGE") & "<BR>")
response.write( buildSQLInsert("lname,fname") & "<BR>")
response.write( buildSQLInsert("mycheckbox,fname") &
=<"<BR<")
else
%>

<html>
<body>
<form name=f method=post action="列表4.asp">
Gimme your:<br>
First Name: <input type=text name="fName"<<br>
Last Name: <input type=text name="lName"<<br>
Age: <input type=text name="num_age"<<br>
<input type="checkbox" value="Y" name="MyCheckBox"<Do you want this checked?<br>
<input type="submit" value="Submit">
</form>
</body>
</html>

<%
end if
%>


空值Null 的處理相當簡單。如果我們收到的欄位為空白,我們就在最終SQL欄位中放空值。這很簡單,重要的是要注意:使用這種方法的前提是,在做此項操作之前,已經對錶單資料進行過校正。例如,如果您的資料庫不允許fname使用空值,您就要在向ASP代碼提交資料之前,確保使用者填寫了這個欄位。(用戶端JavaScript 做這件事非常優秀。)

另外一個問題是,有時您可能不想在SQL語句中包含某個欄位。列表 D 通過在函數中增加omitFields參數(省略欄位)來解決這個問題。在這個參數中傳遞的任何欄位名都會被排除在最終SQL語句之外。如果要省略不止一個欄位,只要用逗號分隔即可。如果不想省略任何欄位,只要給函數傳遞一個Null 字元串("")即可。注意,要按欄位在HTML檔案中的名稱來傳遞欄位名,而不要按欄位在資料庫中的名稱來傳遞(例如,傳遞num_age,而不是age。)



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。