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

Posted

技术标签:

【中文标题】如何从此 ADODB.Recordset 中获取插入 ID?【英文标题】:How to get the insert ID from this ADODB.Recordset? 【发布时间】:2011-07-27 06:15:33 【问题描述】:

我试图避免在我的网络应用程序中使用直接的 SQL 查询。我环顾四周并得出结论,ADO Recordsets 将是完成这项工作的最佳工具,或者至少是最安全的工具。我需要将记录插入到数据库表中。不幸的是,我不知道如何获取刚刚插入的记录的标识值。这是我现在所拥有的减少:

<%
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 的回答。它帮助很大。

【问题讨论】:

感谢您的更新 - 这是有价值的信息 旧线程,但 rs("id") 是一个 Field 对象。你应该可以得到 rs("id").value 【参考方案1】:

This article 用示例代码解释了获取标识值的方法。

相关代码sn-p为:

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

【讨论】:

谢谢,我看过/略读了那个,但显然我错过了最后一部分的相关性。 我遇到了在此之后返回的字段值的问题。请参阅问题了解我是如何处理的。 这就是为什么代码应该放在评论中而不是链接到外部网站 web.archive.org/web/20150519073859/http://databases.aspfaq.com/… Dee 你能删除那个 URL 并使用 @Mladen Mihajlovic 发布的那个吗?该 url 现在会使用无限循环的警报框使启用 javascript 的浏览器崩溃。

以上是关于如何从此 ADODB.Recordset 中获取插入 ID?的主要内容,如果未能解决你的问题,请参考以下文章

由于空格,ADODB.Recordset 到 SQL Server 查询失败

Excel 单元格到 ADODB.Recordset

adodb.recordset 仅从 sqlite3 数据库中检索部分 blob 数据

无法将“ADODB.Recordset”类型的对象转换为“MSDATASRC.DataSource”类型

错误类型:ADODB.Recordset (0x800A0E79) 对象打开时不允许操作

VB6 ADODB.Recordset RecordCount 属性总是返回 -1