[网友问]
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)
) ASdeclare @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 IDif 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
WendRs.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)
) ASdeclare @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 WRITERif 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
WendRs.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下测试通过。