【问题标题】:Check if variable is a recordset检查变量是否为记录集
【发布时间】:2014-04-08 22:06:11
【问题描述】:

我已经好几年没有使用经典的 asp 了,我不记得如何做到这一点了。

我正在循环通过会话变量将它们打印到文本框中,但是当它遇到记录集变量时,它会返回一个错误。

    Dim Item    
    Dim sessao

    For Each Item in Session.Contents
        If Item <> "Servidor" AND Not IsNull(Session.Contents(item)) THEN
            response.write(Session.Contents(item))
            response.write(item + "<br/>")
            'sessao = sessao + (Item + "&" + Session.Contents(item) + "@")
        end if
    next

所以我需要像 if Item recordset then 这样的东西来跳过这种情况

【问题讨论】:

  • 请问您为什么将记录集存储在会话变量中?它们旨在存储小型数据类型,调用查询不会过于昂贵。
  • 这将发生在任何基于对象的会话值上。尝试使用Not IsObject(Session.Contents(item)
  • 效果很好,谢谢! @meda,这是一个旧系统,现在已经用 .NET 重写了
  • 是的,我明白你的意思,@Lankymart(ASP 之王)提供了一个很好的答案! :)

标签: asp-classic


【解决方案1】:

如果您尝试将对象Response.Write 发送到页面,包含对象的会话值总是会导致错误。

您可以通过使用IsObject() 函数检查 Session 值是否包含对象来避免这种情况。

在您的代码中类似于

If Item <> "Servidor" And Not IsObject(Session.Contents(item)) Then

重要提示:

正如meda 指出的那样,将ADODB.Recordset 对象存储在会话值中是很昂贵的。如果您可以解释您要完成的工作,则不建议这样做,我们也许能够提供更可行的解决方案。

【讨论】:

  • 事实是有这个 asp/vb 系统,我正在开发一个新的 .NET 系统,它需要与 asp 系统兼容。由于会话值不能在这两者之间共享,我需要将它们打印到文本框中才能在 .NET 系统中获取它
  • @ChristopherFreyburg 对,所以你只是想弄清楚里面有什么以及如何使用它。可以理解。
  • 会话不可共享,但您可以开发一些代码,将 asp-classic 会话转换为 ASP.Net 会话。实际上,它重建了会话对象。它就像两者之间的中间人。见this article
  • 事实上我在link之后做了一些修改,但是感谢@Lankymart,你很有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-05
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
相关资源
最近更新 更多