我试图避免在Web应用程序中使用直接SQL查询。我环顾四周,得出的结论是ADO Recordset是该工作的最佳或至少最安全的工具。我需要将记录插入数据库表中。不幸的是,我对于如何获取刚刚插入的记录的标识值不知所措。这是我现在所拥有的东西的减少:

<%
dim insertID, rs
set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "my_table_name", conn, adOpenForwardOnly, adLockOptimistic

rs.AddNew()

Call m_map_values_to_rs(rs)

rs.Update()

insertID = rs("id")

rs.Close()
rs = Nothing
%>

我拥有的代码已成功插入记录,但是我一辈子都无法弄清楚如何在插入后获取Recordset的id字段进行更新。如何从此Recordset中获取标识列的值?

更新-这是上面代码的解决方案。

我必须将游标类型更改为adOpenKeyset而不是adOpenForwardOnly。完成此操作后,插入后,记录将自动使用“自动编号”字段的新值进行更新。但是,它实际上是,而不是rs("id")的值不会成为整数,甚至不会成为变体。它变成某种Automation类型,不能评估为数字。由于某种原因,也不能直接在该类型上使用CInt()。因此,您要做的就是将值转换为字符串,然后将其转换为Int。这是我的处理方式:
insertID = CInt( rs("id") & "" )

感谢Dee的回答。它极大地帮助了我。

最佳答案

This article解释了使用示例代码获取身份值的方法。

相关代码段为:

<%
    fakeValue = 5
    set conn = CreateObject("ADODB.Connection")
    conn.open "<conn string>"
    sql = "INSERT someTable(IntColumn) values(" & fakeValue & ")" & _
        VBCrLf & " SELECT @@IDENTITY"
    set rs = conn.execute(sql)
    response.write "New ID was " & rs(0)
    rs.close: set rs = nothing
    conn.close: set conn = nothing
%>

关于asp-classic - 如何从此ADODB.Recordset获取插入ID?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5506456/

10-16 18:46