[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下测试通过。
- [FAQ]ASP中提取多选列表框中的值,并传递给存储过程执行。
- ASP.NET执行存储过程,并获取存储过程的返回值
- ASP.NET执行存储过程,并获取存储过程的返回值
- 在ASP中执行存储过程
- ASP中如何执行存储过程?
- ASP 执行存储过程
- asp.net中如何向存储过程传递参数
- 获取xml文档中存储过程并执行(mysql)
- asp.net执行存储过程
- Asp.Net 中通用存储过程执行方法
- 存储过程中执行sql字符串,给存储过程的变量赋值
- 存储过程中执行存储过程,并把结果赋值给output参数
- 在存储过程中执行别的存储过程并返回其结果集
- Oracle-将存储过程授权给另一个用户,并在另一个用户下执行
- oralce存储过程拼接sql字符串,并执行sql字符串给变量赋值
- ASP.Net中使用VB.Net调用存储过程并得到返回值
- ASP.Net中使用VB.Net调用存储过程并得到返回值
- ASP.Net中使用VB.Net调用存储过程并得到返回值
- 创业再度搁浅
- 认识RAID
- 分享:让web页面部分内容只读
- 分享:Project级别的权限控制
- China, Vietnam hold border talks
- [FAQ]ASP中提取多选列表框中的值,并传递给存储过程执行。
- 环球航行的飞机问题的再次讨论
- 深圳租房
- AspectJ vs Xdoclet All of AOP?
- ASP与Form一起工作(转贴)
- 网址收藏
- ASP如何访问数据库(转贴)
- ASP多记录的分页显示(转贴)
- 哈哈,今天成功申请到了一个Gmail 爽呀~~