[FAQ]ASP中提取多选列表框中的值,并传递给存储过程执行。

来源:互联网 发布:网站性能优化 编辑:程序博客网 时间:2024/05/04 00:32

[网友问]
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下测试通过。 

原创粉丝点击