我写了个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)