Asp-Classic

如何從此 ADODB.Recordset 中獲取插入 ID?

  • January 3, 2019

我試圖避免在我的網路應用程序中使用直接的 SQL 查詢。我環顧四周,得出的結論是,ADORecordset將是完成這項工作的最佳工具,或者至少是最安全的工具。我需要將記錄插入到數據庫表中。不幸的是,我不知道如何獲取剛剛插入的記錄的標識值。這是我現在所擁有的減少:

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

本文通過範常式式碼解釋了獲取標識值的方法。

相關的程式碼片段是:

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

引用自:https://stackoverflow.com/questions/5506456