如何从此 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 Recordset
s 将是完成这项工作的最佳工具,或者至少是最安全的工具。我需要将记录插入到数据库表中。不幸的是,我不知道如何获取刚刚插入的记录的标识值。这是我现在所拥有的减少:
<%
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 查询失败
adodb.recordset 仅从 sqlite3 数据库中检索部分 blob 数据
无法将“ADODB.Recordset”类型的对象转换为“MSDATASRC.DataSource”类型