用asp split得到的数组作为sql条件中in的取值范围,出现错误

<!--#includefile="conn.asp"--><%voteadd=Split(request.form("voteadd"),",")setrs=serve... <!--#include file="conn.asp"-->
<%
voteadd=Split(request.form("voteadd"),",")

set rs=server.CreateObject("adodb.recordset")
sql="SELECT count(distinct(college)) as cd FROM voter where id in "&voteadd&""
rs.Open sql,conn,3,3

if(rs("cd"))=1 then
response.write "选择的人所在学校都是一样的!"
end if

rs.close
set rs=nothing
%>
我用WIN7+IIS6 页面空白什么提示都没有,但是有时候提示类型不匹配,如何解决这个问题?
展开
 我来答
网海1书生
科技发烧友

2014-04-08 · 擅长软件设计、WEB应用开发、小程序
网海1书生
采纳数:12310 获赞数:26223

向TA提问 私信TA
展开全部
voteadd=Split(request.form("voteadd"),",")

改为
voteadd=request.form("voteadd")

sql="SELECT count(distinct(college)) as cd FROM voter where id in "&voteadd&""

改为
sql="SELECT count(distinct(college)) as cd FROM voter where id in (" & voteadd & ")"

补充说明: in后面的数据结构就是类似(1, 2, 3, 4)这样的字串,你用Split分解为数组反而是画蛇添足!
追问
这个确实是我没仔细研究,按照您的指点我修改了之后,提示
ADODB.Recordset 错误 '800a0bb9'
参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。
/test.asp,行 7
应该是id与voteadd 数据类型不匹配,数据库sql2000里我用numeric自增,voteadd是字符串,这个您处理过吗?
追答
request.form("voteadd")的值本身就是 2, 6, 4, 5, 3 这样的字符串,所以直接把它放到 in () 的括号中就行了。你用split把它分解为数组再放到()中肯定提示类型不匹配啦。你在评论中所说的方法虽然奏效,但它实际上是把数组重新组合为 2, 6, 4, 5, 3 这样的字符串,所以仍然是脱裤子放屁——多搞!我干脆给你完整的代码吧:

另外,你评论中所说的方法虽然是多搞,但也确实是有效的,不过完全可以简化一下,用join函数就可以把数组重新组合为字符串了:

补充一句:join函数是split函数的逆运算,所以我才会说这是多搞啊,因为一来一去又重新到回起点了!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式