如何从此ADODB.Recordset获取插入ID?

时间:2011-03-31 21:17:11

标签: asp-classic ado

我试图避免在我的网络应用中使用直接的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的回答。它帮助极大。

1 个答案:

答案 0 :(得分:3)

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 
%>