[FAQ]ASP中提取多重選擇清單方塊中的值,並傳遞給預存程序執行。

來源:互聯網
上載者:User

[網友問]
ASP中我怎樣提取  <select  multiple  name="myfunction">裡面所有的值

<select name="select" size="10" multiple>

<option value="資料集1">資料集1</option>
<option value="資料集2">資料集3</option>
<option value="資料集3">資料集3</option>
<option value="...">...</option>
</select> 

這是一個可以在列表框中多項選擇資料的列表框,現在問題是:
怎樣才能實現將列表中多項值提交並得到結果集,並將提交的數值用SQL語句查詢出來呢?請大家給予協助,謝謝!

[griefforyou答]
選擇多項後,提交自動會以逗號隔開資料。

[網友問]
謝謝版主回覆,我用request.form("select")不能將多個選擇的結果集傳遞,況且我要用列表中選擇的資料值來做select查詢,如果在列表中選擇了多個值,具體怎樣得到該值和怎樣用它來做查詢?能具個例子嗎?  盼複!謝謝大家!

[griefforyou答]
<%
if Request.form("Action")<>"" then
sql="select * from table where fieldname in ('" & replace(request.form("select"),", ","','") & "')"
response.write sql
end if
%>
<form name="form1" method="post">
<select name="select" multiple>
<option value="1">---1---</option>
<option value="2">---2---</option>
<option value="3">---3---</option>
<option value="4">---4---</option>
<option value="5">---5---</option>
</select>
<input type="hidden" name="Action" value="提交">
<input type="submit" name="Submit" value="提交">
</form>

我選擇2,3,產生的SQL為
select * from table where fieldname in ('2','3')

[網友問]
可行,但因需要我用的是預存程序,如在列表中選擇一個項目時沒有問題,但兩個以上時會有問題如提示:
Microsoft OLE DB Provider for SQL Server 錯誤 '80040e14' 必須傳遞參數個數 2,並以 '@name = value' 的形式傳遞後續的參數。一旦使用了 '@name = value' 形式之後,所有後續的參數就必須以 '@name = value' 的形式傳遞。

在使用預存程序 select * from table where  @fieldname =('" & replace(request.form("select"),", ","','") & "')" 查詢時會出錯誤,原因是 @fieldname 不能一次將多個值賦給預存程序中的變數,只接受單個賦予。
這時可能需要將多個所選擇的列表值存為變數或數組才可以吧? 但又怎樣實現? 煩請再幫忙解答一下好嗎?!

[griefforyou答]
1.數值型欄位的處理
a.預存程序
CREATE PROCEDURE sp_Test(
@id varchar(1000)
) AS

declare @SQL nvarchar(2000)

set @SQL=N'Select * from book where id in(' + @id + ')'     --產生SQL語句
EXEC sp_executesql @SQL
GO

b.ASP程式
<%
Dim ConnStr
Dim Cn,Cmd,Rs
Dim ID

if Request.form("Action")<>"" then
'取得使用者提交的查詢條件
ID=replace(request.form("select"),", ",",")      '替換時不加單引號
'連接字串
ConnStr="Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=book;Data Source=(local)"
'建立Connection對象
Set Cn=Server.CreateObject("ADODB.Connection")
'串連資料庫
Cn.Open ConnStr
'串連Command對象
Set Cmd=Server.CreateObject("ADODB.Command")
'設定Command對象的串連
Cmd.ActiveConnection=Cn
'設定命令類型為Stored Procedure
Cmd.CommandType=4
'指定預存程序名
Cmd.CommandText="sp_Test"  
'設定預存程序參數
Cmd.Parameters.Append cmd.CreateParameter("@id",200,1,1000)
Cmd("@id")= ID      '直接賦值給預存程序的參數
'執行存預存程序返回記錄集
set Rs=Cmd.Execute
While Not Rs.Eof
  Response.Write Rs("bookname") & " " & Rs("writer") & "<br>"
  Rs.MoveNext
Wend

Rs.Close
Set Rs=Nothing
Set Cmd=Nothing
Cn.Close
Set Cn=Nothing
end if

%>
<form name="form1" method="post">
<select name="select" multiple>
<option value="217">---217---</option>
<option value="218">---218---</option>
<option value="3">---3---</option>
<option value="4">---4---</option>
<option value="5">---5---</option>
</select>
<input type="hidden" name="Action" value="提交">
<input type="submit" name="Submit" value="提交">
</form>

2.字元型欄位處理
a.預存程序
CREATE PROCEDURE sp_Test2(
@writer varchar(1000)
) AS

declare @SQL nvarchar(2000)

set @SQL=N'Select * from book where writer in(' + @writer + ')'  --產生SQL語句
EXEC sp_executesql @SQL
GO

b.ASP程式
<%
Dim ConnStr
Dim Cn,Cmd,Rs
Dim WRITER

if Request.form("Action")<>"" then
'取得使用者提交的查詢條件
WRITER=replace(request.form("select"),", ","','")    '替換時加單引號
'連接字串
ConnStr="Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=book;Data Source=(local)"
'建立Connection對象
Set Cn=Server.CreateObject("ADODB.Connection")
'串連資料庫
Cn.Open ConnStr
'串連Command對象
Set Cmd=Server.CreateObject("ADODB.Command")
'設定Command對象的串連
Cmd.ActiveConnection=Cn
'設定命令類型為Stored Procedure
Cmd.CommandType=4
'指定預存程序名
Cmd.CommandText="sp_Test2"  
'設定預存程序參數
Cmd.Parameters.Append cmd.CreateParameter("@writer",200,1,1000)
Cmd("@writer")= "'" & WRITER & "'"  '在兩邊再加上一個單引號,然後賦值給預存程序的參數
'執行存預存程序返回記錄集
set Rs=Cmd.Execute
While Not Rs.Eof
  Response.Write Rs("bookname") & " " & Rs("writer") & "<br>"
  Rs.MoveNext
Wend

Rs.Close
Set Rs=Nothing
Set Cmd=Nothing
Cn.Close
Set Cn=Nothing
end if

%>
<form name="form1" method="post">
<select name="select" multiple>
<option value="席絹">---席絹---</option>
<option value="岑凱倫">---岑凱倫---</option>
<option value="3">---3---</option>
<option value="4">---4---</option>
<option value="5">---5---</option>
</select>
<input type="hidden" name="Action" value="提交">
<input type="submit" name="Submit" value="提交">
</form>

以上程式在Win2000 + IIS5 + SQL Server 2000下測試通過。 

相關文章

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.