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