代码之家  ›  专栏  ›  技术社区  ›  jamesmhaley

ASP Classic和SQL Server 2008给出了奇怪的响应

  •  1
  • jamesmhaley  · 技术社区  · 15 年前

    开始出现此错误,似乎是自升级到SQL Server 2008之后。

    当插入数据库然后返回标识时,在与请求的名称或序号错误相对应的集合中找不到“item”。

    代码如下:

    SQL = "INSERT INTO PageFeatures(nPageFeatureFlagId,nPageFeatureFeatureId,nPageFeaturePageId) VALUES(" & nTemplateFlagId & "," & nFeatureId & "," & nPageId & "); SELECT SCOPE_IDENTITY() As nPageFeatureId;"
    objrs.open SQL,objConn,1,1
        nPageFeatureId = objrs("nPageFeatureId")
    objrs.close
    

    插入操作与数据库中的记录相同。因为某种原因它没有返回ID。它工作正常,在SSMS中运行时返回ID。但是ASP看不到返回的ID,所以有一些原因。

    任何帮助都将不胜感激!

    2 回复  |  直到 13 年前
        1
  •  1
  •   Amadiere    15 年前

    您可能需要尝试移动记录集?例如

    SQL = "INSERT INTO PageFeatures(nPageFeatureFlagId,nPageFeatureFeatureId,nPageFeaturePageId) VALUES(" & nTemplateFlagId & "," & nFeatureId & "," & nPageId & "); SELECT SCOPE_IDENTITY() As nPageFeatureId;"
    objrs.open SQL,objConn,1,1
        objrs.NextRecordset
        nPageFeatureId = objrs("nPageFeatureId")
    objrs.close
    

    Raj对SQL注入的评论仍然是相关的。:)

    编辑:详细说明这里有两个记录集。第一个是由insert语句创建的空语句,第二个是由分号之后的所有内容引起的。这是您想要的字段。因此,开始时,objrs连接到它的记录集集合的第一个(而不是记录集中的行),然后移动到下一个记录集-然后您可以按照自己的意愿来处理它。

        2
  •  1
  •   jamesmhaley    15 年前

    排序:

    SQL = "INSERT INTO PageFeatures(nPageFeatureFlagId,nPageFeatureFeatureId,nPageFeaturePageId) VALUES(" & nTemplateFlagId & "," & nFeatureId & "," & nPageId & ");"
    objConn.execute(SQL)
    
    Set oReturnValueRS = objConn.Execute("SELECT SCOPE_IDENTITY()")
    nPageFeatureId = oReturnValueRS(0).Value
    oReturnValueRS.close : set oReturnValueRS = nothing