Asp classic 在经典asp中插入后无法获取作用域\u标识
我必须为经典asp做一个快速而脏的sql会话存储,所以我有以下的存储过程来执行插入工作。当我从sqlmanagementstudio或通过asp代码运行它时,它可以很好地插入,但不会返回scope\u标识。奇怪的是,当我从代码中执行过程时,当对象在检查rs.eof的行中被关闭时,不允许执行操作Asp classic 在经典asp中插入后无法获取作用域\u标识,asp-classic,vbscript,ado,Asp Classic,Vbscript,Ado,我必须为经典asp做一个快速而脏的sql会话存储,所以我有以下的存储过程来执行插入工作。当我从sqlmanagementstudio或通过asp代码运行它时,它可以很好地插入,但不会返回scope\u标识。奇怪的是,当我从代码中执行过程时,当对象在检查rs.eof的行中被关闭时,不允许执行操作 create procedure InsertSessionValue @keyname varchar(50), @value varchar(max) as declar
create procedure InsertSessionValue
@keyname varchar(50),
@value varchar(max)
as
declare @ID int
delete from storedsessionsimple where datesaved < dateadd(d, -1, getdate())
insert into dbo.StoredSessionSimple (SessionKey, SessionValue, DateSaved) values (@keyname, @value, getdate())
set @ID = SCOPE_IDENTITY()
return @ID
在存储过程中使用RETURN通常用于返回状态或错误代码。如果要从存储的进程中以记录集的形式返回数据,请使用SELECT而不是return
更新:您的存储过程现在正在返回一个记录集,这听起来好像仍然没有发现。根据ADO命令的MSDN文档:
如果该命令不打算返回结果,例如,只要指定了adExecuteNoRecords选项,提供程序的SQL更新查询将不返回任何结果;否则,Execute将返回一个关闭的记录集
如果要在记录集中返回SCOPE_标识,则需要对存储过程进行一些更改。当前实现标识的方式是将标识作为返回值参数返回,您必须使用ADO命令对象检索该参数。返回值将是集合中的第一个参数。请参见下面的示例 如果要在记录集中返回结果,请尝试更改行
set @ID = SCOPE_IDENTITY()
到
并删除返回语句。只需使用
set nocount on ;
您的Sql插入查询带有
set nocount off ;
并采用波纹管法
Set rsInsert = conn.execute(SQLQuery)
if not rsInsert.EOF then
response.write(rsInsert(0))
end if
它很好用。我测试过。对。好电话。但不幸的是,我仍然在if not rs.eof then行上出现对象关闭错误。即使在存储过程中使用SELECT而不是RETURN?是的,我已经做了更改,但仍然会出现相同的错误。有趣。那么,您知道如何让它获取更新吗?当您从ServerManagementStudio执行存储过程时,现在是否获得了值?
set nocount off ;
Set rsInsert = conn.execute(SQLQuery)
if not rsInsert.EOF then
response.write(rsInsert(0))
end if