【问题标题】:can't get scope_identity after insert in classic asp在经典 asp 中插入后无法获取 scope_identity
【发布时间】:2014-04-03 17:13:43
【问题描述】:

我必须为经典的 asp 做一个快速而肮脏的 sql 会话存储,所以我有以下存储过程来完成插入工作。当我从 sql management studio 或通过 asp 代码运行它时,它插入得很好,但它没有返回 scope_identity。奇怪的是,当我从代码执行该过程时,我在检查 rs.eof 的行上收到“对象关闭时不允许操作”错误消息。

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

而asp代码是……

set cnLocal = GetConnection()
    cnLocal.open()

    set rs = cnLocal.execute("exec InsertSessionValue '" & SessionKey & "','" & SessionValue & "'")
    if not rs.eof then
        id = rs(0)
    end if
    rs.close: set rs = nothing
    end if
    cnLocal.close: set cnLocal = nothing

【问题讨论】:

    标签: asp-classic vbscript ado


    【解决方案1】:

    在存储过程中使用RETURN 通常用于返回状态或错误代码。如果您想从存储的过程中将数据作为记录集返回,请使用 SELECT 而不是 RETURN

    更新:听起来您的存储过程现在正在返回一个记录集,这听起来仍然没有得到证实。根据 ADO 命令的 MSDN 文档:

    如果命令不打算返回结果(例如,SQL UPDATE 查询),只要指定了选项 adExecuteNoRecords,提供程序就会返回 Nothing;否则 Execute 返回一个关闭的 Recordset。

    【讨论】:

    • 正确。好决定。但不幸的是,我仍然在“if not rs.eof then”行上收到对象关闭错误。
    • 即使您在存储过程中使用SELECT 而不是RETURN
    • 是的,我已经进行了更改,但仍然出现相同的错误。
    • 有趣。那么有什么想法可以让它“接收”更新吗?
    • 当您从服务器管理工​​作室执行存储过程时,您现在获得值了吗?
    【解决方案2】:

    如果您想在记录集中返回SCOPE_IDENTITY,您的存储过程需要进行一些更改。当前实现的方式是 IDENTITY 作为 RETURN_VALUE 参数返回,您必须使用 ADO Command 对象检索该参数。返回值将是Command.Parameters 集合中的第一个参数。有关示例,请参阅以下article

    如果您想在记录集中返回结果,请尝试更改行

    set @ID = SCOPE_IDENTITY()
    

    SELECT SCOPE_IDENTITY() AS NEW_ID
    

    并删除 return 语句。

    【讨论】:

      【解决方案3】:

      随便用

      set nocount on ; 
      

      您的 Sql 插入查询带有“;”

      set nocount off ;
      

      并使用以下方法

      Set rsInsert = conn.execute(SQLQuery)
      
      
      if not rsInsert.EOF then
         response.write(rsInsert(0))
      end if
      

      它工作正常。我测试过。

      【讨论】:

        猜你喜欢
        • 2014-02-28
        • 2010-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多