日期:2014-05-17  浏览次数:20669 次

recordset莫名其妙就被close了
我写了个function:
VBScript code

function getrs(sqlstr)
    set getrs=server.createobject("adodb.recordset")
    getrs.open sqlstr,conn
end function



然后在程序中平常使用这个function是没问题的,比如:
VBScript code

set rs=getrs("select * from a")


那么,可以通过rs读取到相应数据

但是,有一段是这样子的:
VBScript code

sqlstr="insert into a(aa,ab) values(123,456)"
sqlstr=sqlstr+";declare @iden int;set @iden=@@identity;select @iden"
sqlstr=sqlstr+";insert into [a-b](aid,bid) values(@iden,1)"
sqlstr=sqlstr+";update [a-c] set aid=@iden where aid=1 and cid=1"
set rs=getrs(sqlstr)
aid=rs(0)


结果,在最后一句的地方报错了:"在对应所需名称或序数的集合中,未找到项目"
但是查看结果发现,sqlstr是被成功执行了的
然后,我在最后一句前面加上:
VBScript code

response.write rs.recordcount&" "&rs.fields.count
response.end


报错:"对象关闭时,不允许操作"
我就晕了,还有自动close的功能啊,而且还有选择性,单句就不管,多句就要给close掉,你杀了我吧

高手来帮帮忙吧,分析下是什么问题

------解决方案--------------------
不是单句、多句的问题
select * from a 操作返回一个记录集RS ,可以对它进行相关操作。
insert 语句本身不能返回记录集,当然不存在rs(0)
------解决方案--------------------
一般会写到存储过程中, SET NOCOUNT ON,
ADO 用 cmd 调用存储过程, 直接取rs(0)就可以了

------解决方案--------------------
sqlstr="insert into a(aa,ab) values(123,456)"
sqlstr=sqlstr+";declare @iden int;set @iden=@@identity;select @iden"
sqlstr=sqlstr+";insert into [a-b](aid,bid) values(@iden,1)"
sqlstr=sqlstr+";update [a-c] set aid=@iden where aid=1 and cid=1"
sqlstr=sqlstr+";select @@rowcount"
set rs=getrs(sqlstr)
aid=rs(0)