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

來源:互聯網
上載者:User
集合|語句 更簡單的方法


由此可見,我們需要一種簡單的方法,能夠根據任何錶單建立SQL語句,而不管表單中有多少欄位,也不管欄位類型如何。要做到這點,我們要利用ASP 內建的request.form集合。經過在這個集合中迴圈,我們能夠把每個表單欄位的名稱和它的值一起提取出來。列表 B 是這種工作方式的一個簡單版本。在您查看代碼時,請注意:為了這個技術能夠生效,我們的HTML欄位名必須與資料庫表中的欄位名相同。
列表 B:使用 request.form 來輕鬆建立SQL字串。

<%
iStr = "insert into uData "
vStr = "values ("
nStr = "("

' 在表單集合中迴圈,並建立起SQL語句的組成部分
for each x in request.form
' 建立欄位名列表
nStr = nStr & x & ", "
' 建立欄位值列表
if uCase(x) = "AGE" then
vStr = vStr & request.form(x) & ", "
else
vStr = vStr & "'" & request.form(x) & "', "
end if
next

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

' 把SQL語句組裝起來
iStr = iStr & nStr & vStr

if trim(request("fName")) >> "" then
response.write( iStr & ">BR>")
else
%>

<html>
<body>
<form name=f method=post action="列表2.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="age"><br>
<input type="submit" value="Submit">
</form>
</body>
</html>

<%
end if
%>

您可能注意的第一件事是,這段代碼要比第一段樣本中的代碼長一點。但是,請記住,這段代碼能夠處理任何數量的欄位。因此,對於大的表單,使用這種技術非常有效。

您應當注意的第二件事是:我們仍然必須知道一個欄位-age欄位的名稱和類型。因此,我們需要一個方法,把欄位類型告訴ASP代碼,這樣才能建立合適的SQL語句。

我們在這裡使用的解決方案是:把資料類型嵌入到每個HTML欄位名裡。例如,數值型欄位的名稱以字串num_開始。這樣,要把age欄位名改成num_age。 (字元型和文本型欄位不用改名,這樣會預設地把它們放在括弧中。) 列表 C 顯示了這個解決方案的實際應用。

列表 C:把欄位類型嵌入到HTML欄位名中。


<%function buildSQLInsert( targetTable)
iStr = "insert into " & targetTable & " "
vStr = "values (" nStr = "("
' 在表單集合中迴圈,並建立起SQL語句的組成部分
for each x in request.form
fieldName = x
fieldData = replace( request.form(fieldName), "'", "''")
typeDelimPos = inStr(fieldName, "_")
if typeDelimPos = 0 then
' Its a text field
' 建立欄位名列表
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
next

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

' 把SQL語句組裝起來
buildSQLInsert = iStr & nStr & vStr
end function


if trim(request("fName")) >< "" then
response.write( buildSQLInsert & ">BR<")
else
%>

<html>
<body>
<form name=f method=post action="listing3.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="submit" value="Submit">
</form>
</body>
</html>

<%
end if
%>


在這裡,我們使用了來自列表 B 的部分代碼,並把它們放在一個叫做buildSQLInsert的函數中。在設定完臨時變數後,我們進入迴圈,處理的多少與以前做的一樣。主要的區別是,每次進入迴圈,我們要在欄位名稱中尋找底線 (_)。如果找到下劃



相關文章

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 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。