在ASP中用集合成批設(shè)置數(shù)據(jù)庫(kù)
發(fā)表時(shí)間:2024-06-10 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]我們知道,一般的關(guān)系數(shù)據(jù)庫(kù)(如SQL Server、Oracle、Access等)中的查詢操作是支持集合操作的,例如可以用“Update ATable Set Field1 = AValue where Field2 in (Value21,Value22)”來(lái)完成對(duì)數(shù)據(jù)庫(kù)的成批更新操作。我們可以...
我們知道,一般的關(guān)系數(shù)據(jù)庫(kù)(如SQL Server、Oracle、Access等)中的查詢操作是支持集合操作的,
例如可以用“Update ATable Set Field1 = AValue where Field2 in (Value21,Value22)”來(lái)完成對(duì)數(shù)據(jù)
庫(kù)的成批更新操作。我們可以充分利用數(shù)據(jù)庫(kù)的這種集合特性來(lái)提高ASP頁(yè)面操作數(shù)據(jù)庫(kù)的效率。如我們
可以在頁(yè)面上列出多個(gè)記錄,讓用戶選擇要操作的記錄,然后在用戶確定操作后進(jìn)行成批操作,這與一個(gè)記
錄操作一次的方法相比效率明顯要高的多了。
一、HTML的集合屬性
首先,讓我們來(lái)熟悉一下HTML的集合屬性。在表單(FORM)數(shù)據(jù)或查詢(Query)參數(shù)中,當(dāng)
提交的多個(gè)參數(shù)采用同一個(gè)名稱時(shí),這些參數(shù)值將構(gòu)成一個(gè)集合,在ASP頁(yè)面可以獲取這些參數(shù)值或
同名參數(shù)的個(gè)數(shù)。如在下面的頁(yè)面(Set.HTM)中,6個(gè)復(fù)選框采用同一個(gè)參數(shù)名MyCheckBox,其值分別
為1、2、3、4、5、6。
<!-- Set.HTM -->
<html><head><title>集合屬性應(yīng)用</title></head><body>
<p>請(qǐng)選擇要操作的項(xiàng)目,提交數(shù)據(jù)后,將會(huì)顯示您選擇的項(xiàng)目。
<form method="POST" action="set.asp">
<br>1、<input type="checkbox" name="MyCheckBox" value="1">
<br>2、<input type="checkbox" name="MyCheckBox" value="2">
<br>3、<input type="checkbox" name="MyCheckBox" value="3">
<br>4、<input type="checkbox" name="MyCheckBox" value="4">
<br>5、<input type="checkbox" name="MyCheckBox" value="5">
<br>6、<input type="checkbox" name="MyCheckBox" value="6">
<br><input type="submit" value="提交數(shù)據(jù)" name="B1">
</form></body></html>
當(dāng)客戶端選擇了要顯示的項(xiàng)目后,下面的ASP頁(yè)面(Set.ASP)給出客戶端選擇的項(xiàng)目個(gè)數(shù)及其值。
<!-- Set.ASP -->
<%@ LANGUAGE = VBScript %>
<html><head><title>集合操作測(cè)試</title></head>
<body>
<%
Response.Write "<br>您一共選擇了"&request("MyCheckBox").count&"項(xiàng),"
Response.Write "<br>您選擇的項(xiàng)目有:"&request("MyCheckBox")
%>
</body></html>
如當(dāng)客戶端選擇了第二、三、五項(xiàng)并提交數(shù)據(jù)后,將會(huì)看到如下結(jié)果:
您一共選擇了3項(xiàng),
您選擇的項(xiàng)目有:2, 3, 5
應(yīng)該注意到,“2, 3, 5”的形式與SQL語(yǔ)句要求的形式是一致的,我們可以直接或間接地利用這種
形式的結(jié)果,如 "Select * from ATable where AFiled in(" & request("MyCheckBox") & ")"的實(shí)際
SQL查詢語(yǔ)句為“Select * from ATable where AFiled in(2, 3, 5)”。
二、HTML的集合屬性的應(yīng)用
下面我們結(jié)合一個(gè)實(shí)際的例子,討論一下如何在ASP頁(yè)面中利用HTML的集合屬性來(lái)成批操作
數(shù)據(jù)庫(kù),F(xiàn)在我們有一個(gè)記錄客戶電子信箱的ACCESS數(shù)據(jù)庫(kù)EMail,其中有一個(gè)數(shù)據(jù)表EmailList,
包含CustomerId、CustomerName、CustomerEmail三個(gè)字段,分別表示客戶編號(hào)、客戶名稱、客戶電子信箱。
在ASP頁(yè)面SelectId.ASP中,我們采用CheckBox列出所有客戶的客戶名稱(各個(gè)CheckBox的值為對(duì)應(yīng)的
客戶編號(hào)),讓用戶選擇給哪些客戶發(fā)送電子郵件。當(dāng)用戶選擇了客戶并提交數(shù)據(jù)后,SendMail.ASP將檢
索到這些客戶的電子信箱,并給這些客戶發(fā)送電子郵件。具體的信息請(qǐng)參見(jiàn)下面ASP程序代碼和注釋信息。
<!-- SelectId.ASP:列出所有客戶的客戶名稱 -->
<html><head><title>所有客戶的客戶名稱</title></head><body>
<p align=center><font style="font-family:宋體;font-size:9pt">
請(qǐng)選擇要給哪些客戶發(fā)送“新年問(wèn)候”的電子郵件
<form method="POST" action="SendMail.asp">
<%'建立與ACCESS數(shù)據(jù)庫(kù)的連接
Set dbConnection = Server.CreateObject("ADODB.Connection")
dbConnection.open "Driver={Microsoft Access Driver (*.mdb)};"&_
"DBQ=C:\inetpub\wwwroot\test\Email.mdb"
'獲取所有客戶的客戶編號(hào)、客戶名稱
Set rsCustomers = Server.CreateObject("ADODB.RecordSet")
rsCustomers.Open "Select CustomerId,CustomerName,CustomerEmail From EmailList",_
dbConnection,1,3,1
'顯示所有客戶的客戶名稱
while not rsCustomers.eof
%>
<br><input type="checkbox" name="CustomerId" value="<%=rsCustomers("CustomerId")%>">
<a href="mailto:<%=rsCustomers("CustomerEmail")%>">
<%=rsCustomers("CustomerName")%></a>
<%rsCustomers.MoveNext
wend
rsCustomers.close
set rsCustomers = nothing
dbConnection.close
set dbConnection = nothing
%>
<br><input type="submit" value="給客戶發(fā)送電子郵件" name="B1"
style="font-family:宋體;font-size:9pt">
</form></body></html>
<!-- SendMail.ASP:給所選擇客戶發(fā)電子郵件 -->
<html><head><title>給所選擇客戶發(fā)電子郵件</title></head><body>
<p align=center><font style="font-family:宋體;font-size:9pt">
正在給下面客戶發(fā)送電子郵件
<%'建立與ACCESS數(shù)據(jù)庫(kù)的連接
Set dbConnection = Server.CreateObject("ADODB.Connection")
dbConnection.open "Driver={Microsoft Access Driver (*.mdb)};"&_
"DBQ=C:\inetpub\wwwroot\test\Email.mdb"
'獲取所選擇客戶的電子信箱
Set rsCustomers = Server.CreateObject("ADODB.RecordSet")
rsCustomers.Open "Select CustomerName,CustomerEmail From EmailList where CustomerId in ("&_
Request("CustomerId")&")",dbConnection,1,3,1
while not rsCustomers.eof
'給一個(gè)客戶發(fā)電子郵件
Set myMail = CreateObject("CDONTS.NewMail")
myMail.From = "sales@test.com"
myMail.value("Reply-To") = "sales@test.com"
myMail.To = rsCustomers("CustomerEmail")
myMail.Subject = "來(lái)自王發(fā)軍的新年問(wèn)候"
myMail.BodyFormat = 1
myMail.MailFormat = 1
myMail.Body = "王發(fā)軍向"&rsCustomers("CustomerName")&"問(wèn)好!"
myMail.Send
Set myMail = Nothing
%>
<br>給<a href="mailto:<%=rsCustomers("CustomerEmail")%>"><%=rsCustomers("CustomerName")%></a>
發(fā)送電子郵件成功!
<%
rsCustomers.MoveNext
wend
rsCustomers.close
set rsCustomers = nothing
dbConnection.close
set dbConnection = nothing
%>
<br>在所選擇的客戶發(fā)送電子郵件完畢!
</body></html>
以上程序在WINNT4.0+IIS4.0+ASP2.0+Access97下調(diào)試通過(guò)。