首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > ASP >

recordset莫名其妙就被close了解决思路

2012-04-10 
recordset莫名其妙就被close了我写了个function:VBScript codefunction getrs(sqlstr)set getrsserver.cr

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

VBScript code
function getrs(sqlstr)    set getrs=server.createobject("adodb.recordset")    getrs.open sqlstr,connend 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.countresponse.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)

热点排行